Все эти слова особенность - PullRequest
0 голосов
/ 10 января 2009

У меня есть поле "описание", проиндексированное в Lucene. Это поле содержит описание книги. Как мне достичь функциональности «Все эти слова» в этом поле, используя класс BooleanQuery? Например, если пользователь вводит «наиболее продаваемую книгу», он должен вернуть книги, в описании которых есть все эти слова.

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 января 2009

Есть две части, чтобы заставить это работать:

  1. Вам необходимо правильно проанализировать входящие документы, чтобы отдельные слова были помечены и проиндексированы отдельно
  2. Пользовательский запрос должен быть токенизирован, а токены объединены с оператором AND.

Для # 1 есть ряд анализаторов и токенизаторов, которые поставляются с Lucene - смотрите в пакете org.apache.lucene.analysis. Существуют варианты для разных языков, стволовых, стоп-слов и т. Д.

Для # 2 снова есть много парсеров запросов, которые идут с Lucene, в основном в пакете org.apache.lucene.queryParser. MultiFieldQueryParser может быть полезно для вас: чтобы каждый срок присутствовал, просто позвоните

QueryParser.setDefaultOperator(QueryParser.AND_OPERATOR)

Lucene in Action , хотя несколько версий устарели, все еще точны и чрезвычайно полезны для получения дополнительной информации об анализе и анализе запросов.

0 голосов
/ 10 января 2009

Я полагаю, если вы добавите все части запроса (по одной на срок) через

BooleanQuery.add(Query, BooleanClause.Occur)

и установите для этого второго параметра константу BooleanClause.Occur.MUST, тогда вы должны получить то, что хотите. Эквивалентный синтаксис запроса будет "+ term1 + term2 + term3 ...".

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