Я использую Lucene для индексации и поиска небольшого количества больших документов. Используя демо с сайта Lucene, я проиндексировал документы и могу найти их. Однако результат поиска не особенно полезен, так как он указывает на файл документа. С очень большими документами это не особенно полезно.
Мне интересно, может ли Lucene проиндексировать эти очень большие документы и создать над ними абстракцию, обеспечивающую гораздо более детальные результаты.
Пример может лучше объяснить, что я имею в виду. Рассмотрим очень большую книгу, такую как Библия. В одном файле содержится весь текст Библии, поэтому в демоверсии результат поиска, скажем, «Дамаск» будет указывать на файл. Я хотел бы сохранить большой документ, но результаты поиска будут возвращать результаты, указывающие на книгу, главу или даже точную, как стих. Таким образом, поиск «Дамаска» может вернуть (среди прочего) Книгу 23, Главу 7, Стих 8.
Возможно ли это (и рекомендуется использовать Lucene), или я должен вместо этого попытаться разделить большой документ на множество небольших файлов для индексации?
Если это имеет какое-либо значение, я использую Java Lucene 2.9.0 и индексирую файлы HTML размером примерно 1–4 МБ. Который с точки зрения размера файла не большой, но он большой по сравнению с человеком, который его читает.
Не думаю, что объяснил это так хорошо, как мог. Вот еще один пример.
Скажем, я беру свой большой HTML-файл, и (ради аргументов) поисковый термин "Дамаск" встречается 3 раза. Один раз в строке 100 внутри тега <div>
, в строке 2000 внутри тега <p>
и в строке 5000 внутри тега <h1>
. Можно ли индексировать с помощью Lucene так, чтобы было 3 результата, и они могли указывать на конкретный элемент, в котором находился термин?
Не думаю, что я хочу предоставить другой результат документа для этого термина. Поэтому, если термин «Дамаск» встречается дважды в определенном <div>
, совпадение будет только одно.
Из комментария от Kragen следует, что я хотел бы проанализировать HTML, когда Lucene проходит фазу индексации. Затем я могу решить, какой фрагмент я хочу считать одним документом из того, что читает парсер. Поэтому, если я вижу div с определенным классом, я могу начать новый документ Lucene, и он будет возвращен в качестве отдельного попадания при поиске слова в содержимом div.
Похоже ли это на то, что я хочу сделать, и возможно ли это?