#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, который входит в комплект двоичных версий: