нечеткое сопоставление упругого поиска max_expansions & min_simility - PullRequest
17 голосов
/ 22 августа 2011

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

Как я понимаю, min_simility представляет собой процент, на который запрашиваемая строкасоответствует строке в базе данных.Я не смог найти точное описание того, как рассчитывается это значение.

max_expansions , насколько я понимаю, это расстояние Левенштейна, по которому должен выполняться поиск.Если бы это было расстояние Левенштейна, это было бы идеальным решением для меня.Во всяком случае, это не работает, например, у меня есть слово "Самвел"

queryStr      max_expansions         matches?
samvel        0                      Should not be 0. error (but levenshtein distance   can be 0!)
samvel        1                      Yes
samvvel       1                      Yes
samvvell      1                      Yes (but it shouldn't have)
samvelll      1                      Yes (but it shouldn't have)
saamvelll     1                      No (but for some weird reason it matches with Samvelian)
saamvelll     anything bigger than 1 No

Документация говорит что-то, что я на самом деле не понимаю:

Add max_expansions to the fuzzy query allowing to control the maximum number 
of terms to match. Default to unbounded (or bounded by the max clause count in 
boolean query).

Так что, пожалуйста, кто-нибудь может объяснить мне, какИменно эти параметры влияют на результаты поиска.

1 Ответ

22 голосов
/ 22 августа 2011

min_similarity - это значение от нуля до единицы. Из документов Lucene:

For example, for a minimumSimilarity of 0.5 a term of the same length 
as the query term is considered similar to the query term if the edit 
distance between both terms is less than length(term)*0.5

Упоминаемое «расстояние редактирования» - это Расстояние Левенштейна .

Внутренний метод работы этого запроса:

  • находит все существующие в индексе термины, которые могут соответствовать поисковому запросу, если принять во внимание min_similarity
  • затем он ищет все эти термины.

Вы можете себе представить, насколько тяжелым может быть этот запрос!

Для борьбы с этим вы можете установить параметр max_expansions, чтобы указать максимальное количество совпадающих терминов, которые следует учитывать.

...