Поиск точного соответствия с помощью API поиска Lucene - PullRequest
6 голосов
/ 10 июня 2009

Я работаю над API поиска компаний, используя Lucene. У моего индекса компании Lucene есть 2 компании: 1.Abigail Adams National Bancorp, Inc. 2.Национальный Банккорп

Если пользователь вводит данные в National Bancorp, то должна быть возвращена только компания № 2 (т.е. National Bancorp), а не № 1 ..... т.е. должны быть возвращены только точные совпадения. Как мне добиться этой функциональности?

Спасибо за чтение.

Ответы [ 4 ]

11 голосов
/ 11 июня 2009

Вы можете использовать KeywordAnalyzer для индексации и поиска в этом поле. Анализатор ключевых слов сгенерирует только один токен для всей строки.

1 голос
/ 13 августа 2012

Я много гуглил без помощи по той же проблеме. Некоторое время почесывая голову, я нашел решение. Найдите строку в двойных кавычках, которая решит вашу проблему.

National Bancorp вернет и # 1, и # 2, но "National Bancorp" вернет только # 2.

1 голос
/ 13 января 2012

Это то, что может служить основанием для использования фильтра гальки. Этот фильтр группирует несколько слов вместе. Например, Abigail Adams National Bancorp с ShingleFilter из 3 токенов будет производить (в предположении простого WhitespaceAnalyzer) [Abigail], [Abigail Adams], [Abigail Adams National], [Adams National Bancorp], [Adams National], [Adams] , [Национальный], [Национальный Bancorp] и [Bancorp].

Если пользователь отправляет запросы на National Bancorp, вы получите точное совпадение с самим National Bancorp и более низкое точное совпадение с Abigail Adams National Bancorp (с меньшим количеством баллов, потому что у этого в поле гораздо больше жетонов, что снижает IDF). Я думаю, что имеет смысл возвращать оба документа по такому запросу.

Возможно, вы захотите применить фильтр shingle и во время запроса, в зависимости от варианта использования.

0 голосов
/ 11 июня 2009

Вы можете пересмотреть ваши требования, в зависимости от того, правильно ли я понял ваш вопрос. Пожалуйста, держись со мной, если я тебя неправильно понял.

Просто немного пищи для размышлений:

  • Если вы хотите, чтобы точные совпадения были возвращены, то почему вы ищете в первую очередь?

  • Вы уверены, что пользователь ожидает точных совпадений? Обычно я выполняю поиск, предполагая, что поисковая система будет содержать пропущенные слова.

  • Предположим, что пользователь искал Национальный банк , но Национальный банк больше не был в вашем индексе. Хотели бы вы, чтобы Abigail Adams National Bancorp, Inc были исключены из результатов просто потому, что это не точное совпадение?

В свете этого я бы посоветовал вам продолжать представлять все возможных совпадений (точных или нет) пользователю и позволять им самим решать, что для них наиболее подходит. Я говорю это просто потому, что вы, возможно, думаете не так, как все ваши пользователи. Lucene позаботится о том, чтобы самые близкие совпадения имели наивысший рейтинг результатов, помогая им сделать более быстрый выбор.

...