2013-05-20 2 views
5

Я работаю над нечетким запросом, используя Solr, который пересылает репозиторий данных, которые могут иметь слова с ошибками или сокращенные слова. Например, репозиторий может иметь имя со словами «Hlth» (сокращенная форма слова «Здоровье»).Fuzzy Search in Solr

  1. Если я делаю нечеткий поиск Name:'Health'~0.35 Я получаю результаты со словом «Здоровье», но не «Hlth».
  2. Если я делаю нечеткий поиск для Name:'Hlth'~0.35, я получаю записи с именами «Здоровье» и «Hlth».

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

Не могли бы вы помочь и рассказать о том, почему № 1 нечеткий поиск не работает, и если есть другие способы достижения того же.

ответ

4

Вы неправильно используете нечеткий запрос.

Согласно тому, что говорил Майк McCandless (http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html):

FuzzyQuery соответствует терминам «близко» к указанному сроку базового: вы указуете максимально допустимое расстояние редактирования, а также любые условия в пределах этого редактирования расстояния от основания (и, следовательно, документы, содержащие эти термины) сопоставляются.

Синтаксис QueryParser это термин ~ или член ~ N, где N является максимальным допустимого количества редактирований (для старых версий N был запутанный поплавком между 0,0 и 1,0, что приводит к эквивалентным максам редактирование расстояния через сложная формула).

FuzzyQuery отлично подходит для сопоставления имен собственных: Я могу искать mcandless ~ 1, и он будет соответствовать Маккэндлесс (вставка с), mcandles (удалить с), mkandless (заменить с с к) и многое-многое другое " закрыть ". С максимальным расстоянием редактирования 2 вы можете иметь до 2 вставок, удалений или замен. Оценка для каждого матча основана на расстоянии редактирования этого срока; поэтому точное совпадение считается самым высоким; расстояние редактирования 1, нижнее; и т.д.

Так что вам нужно писать запросы, как это - здоровье ~ 2

+0

не работает! Я хотел сопоставить Parkway с Pkwy и наоборот. Parkway ~ 2 соответствует только Parkway и Pkwy ~ 2 соответствует только Pkwy –

+0

@Mysterion: FuzzyQuery не работает почему? он попробовал = «кто такой джонн» ~ 0.2 – iNikkz

2

Вы пишете: "Я хотел, чтобы соответствовать Parkway с Pkwy"

Parkway и Пкви имеют редактировать расстояние 3. Вы можете добиться этого, подбирая «~ 3» для «~ 2» из первого ответа, но Solr нечеткое согласование не рекомендуется для значений больше 2 по соображениям производительности.

Я думаю, что лучший способ приблизиться к вашей проблеме состоял бы в создании контекстно-зависимого словаря синонимов и расширения времени запроса.