Результат запроса Lucene неверен при запуске официальной демо-версии

#lucene

Вопрос:

Я попробовал официальную демо-версию Lucene , запустив индексные файлы с аргументами -index . -docs . и распечатками консоли, включая pom.xml и *.java и *.class добавляются в индекс.

Затем я попробовал поисковые файлы с аргументами -index . -query "lucene AND main" , и консоль печатает только IndexFiles.class и SearchFiles.class и IndexFiles.java, но не SearchFiles.java (что, я думаю, должно быть одним из результатов поиска).

Комментарии:

1. Когда вы запустите демонстрационную версию, используя -query флаг в командной строке, я думаю, вы увидите только первые 10 результатов — это то, что произошло? В верхней части вывода должна быть строка, сообщающая вам, сколько совпадающих документов было найдено — что это за число?

2. @andrewjames Результат был меньше 10.

Ответ №1:

Ваши результаты поиска верны ( .java по крайней мере, для файлов).

В примере кода используется StandardAnalyzer , который, в свою очередь, использует StandardTokenizer .

StandardTokenizer Разделяет вводимый текст на маркеры, используя правила, описанные в этом документе. Например, из раздела 4 этого документа:

введите описание изображения здесь

Если у вас есть текст, подобный следующему, в исходных файлах

 org.apache.lucene.analysis.Analyzer
 

это обозначается как один токен. Здесь нет границ слов.

Заглянув в IndexFiles.java исходный файл, вы увидите следующий текст:

 demonstrating simple Lucene indexing
 

Это разделено на 4 отдельных токена.

Но в SearchFiles.java исходном файле текст «lucene» всегда появляется только в таком тексте, как org.apache.lucene.analysis.Analyzer — и, следовательно, один токен lucene никогда не создается.

Таким образом, ваш запрос не находит никаких совпадений в IndexFiles.java документе, поскольку запрос соответствует точным маркерам. Оба исходных файла содержат слово «main», но только один содержит слово «lucene».


Что касается .class файлов, то, поскольку они являются скомпилированными файлами байт-кода, я бы сказал, что они не должны индексироваться в первую очередь. Lucene работает с текстовыми файлами, а не с двоичными файлами. Да, файлы классов будут содержать фрагменты текста, но они также, как правило, будут содержать непечатаемые управляющие символы, которые не подходят для индексирования. Я думаю, что из-за этого результаты индексации могут быть непредсказуемыми.


Вы можете изучить индексированные данные с помощью Luke, который входит в комплект двоичных версий:

введите описание изображения здесь