Подсчет количества совпадений запросов Regex в поле документа - PullRequest
0 голосов
/ 13 января 2010

Используя Lucene, я могу выяснить, как создать документ, поместить значения в соответствующие поля и затем использовать поисковик для поиска совпадений в проиндексированном документе.

Однако теперь меня больше интересуетколичество совпадений в определенном поле каждого документа.Просто знать, что есть совпадение, хорошо, но я хотел бы знать, сколько раз образец был найден в поле.

Пример.

Document doc = new Document();
doc.add(new Field("TNAME", "table_one", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("CNAME", "column_one", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("DATA", "This would be the data found in this particular field of a single document", Field.Store.NO, Field.Index.ANALYZED));

Если я хотел предварительно выполнить поиск документазапросить поле «ДАННЫЕ», чтобы выяснить, сколько раз встречается шаблон ^ d. * как мне это сделать?(давая результат 2 для вышеуказанного документа).

1 Ответ

0 голосов
/ 18 января 2010

Простой ответ найден:

IndexSearcher searcher = new IndexSearcher(directory);
    IndexReader reader = searcher.getIndexReader();
    RegexTermEnum regexTermEnum = new RegexTermEnum(reader, new Term(
            "field", "d.*"), new JavaUtilRegexCapabilities());

    do {
        System.out.println("Next:");
        System.out.println("\tDoc Freq: " + regexTermEnum.docFreq());
        if (regexTermEnum.term() != null) {             
            System.out.println("\t"+regexTermEnum.term());
            TermDocs td = reader.termDocs(regexTermEnum.term());
            while(td.next()){
                System.out.println("Found "+ td.freq()+" matches in document " + reader.document(td.doc()).get("name"));
            }
        }
    } while (regexTermEnum.next());
    System.out.println("End.");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...