Как получить следующий термин из индекса Lucene? - PullRequest
1 голос
/ 03 августа 2009

Я начинаю с индекса Lucene, который кто-то создал. Я хотел бы найти все слова, которые следуют за данным словом. Я извлек интересующий термин (org.apache.lucene.index.Term) из индекса, и я могу найти документы, содержащие этот термин:

segmentTermDocs = segmentReader.termDocs(term);
while (segmentTermDocs.next) {
        doc = segmentReader.document(segmentTermDocs.doc);
...
}

Можно ли мне найти позиции термина в документе и извлечь термины, следующие за ним?

Ответы [ 2 ]

1 голос
/ 04 августа 2009

Поскольку индексирование n-грамм не подходит в вашей ситуации, потребуется некоторая грубая сила. Вы могли бы перечислить условия IndexReader и termPositions , но это, вероятно, будет мучительно медленным.

Более быстрый подход заключался бы в реализации алгоритма поиска типа «разделяй и властвуй» путем перечисления терминов и использования MultiPhraseQuery для проверки группы сразу. Разделите все потенциальные термины на группы разумного размера (скажем, 1000) и запустите поиск MultiPhraseQuery с каждым чанком и вашим префиксным словом. Если есть какие-либо совпадения, рекурсивно вызывайте подгруппы, пока не достигнете одного термина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...