Я бы использовал Solr вместо этого - он построен на Lucene и управляется ASF, но намного, намного проще в использовании, чем Lucene, особенно для новичков.
Если предлагает практически все основные функции Lucene (конечно, все, что вам нужно для описываемого вами проекта), а также дополнительные вещи, такие как создание снимков, репликация, схемы, ...
В Solr вы просто определили бы поля, которые хотите проиндексировать, примерно так: schema.xml
:
<field name="book_id" type="string" indexed="true" stored="true" required="true" multiValued='false'/>
<field name="book_name" type="text" indexed="true" stored="true" required="true" multiValued='false' />
<field name="book_authors" type="text" indexed="true" stored="true" required="true" multiValued='true' />
<field name="book_categories" type="textTight" indexed="true" stored="true" required="true" multiValued='true' />
Обратите внимание, что атрибут multiValued='true'
позволяет эффективно передавать массив или список в это поле, которое хорошо разбивается и индексируется Solr.
Как только вы это сделаете, запустите Solr, и вы сможете задавать вопросы, такие как "book_authors:Hemingway
" или "book_categories:Romance book_categories:Mills
".
Существует несколько обработчиков запросов, предварительно написанных и настроенных для таких вещей, как разбор сложных запросов (нечеткие совпадения, логические операции, повышение скоринга и т. Д.), А поскольку API Solr предоставляется через HTTP, все это переносится в оболочку. рядом клиентских библиотек, поэтому вам не нужно обрабатывать детали низкоуровневого создания запросов самостоятельно.
На их веб-сайте есть множество замечательных документов , с которых можно начать.