Настройки нечеткости в ElasticSearch
Необходимо, чтобы моя поисковая система обрабатывала небольшие опечатки в строках поиска и все еще вернула правильные результаты.
В соответствии с документами ElasticSearch существуют три значения, которые имеют отношение к нечеткому согласованию в текстовых запросах: нечеткость, max_expansions и префикс_length,
К сожалению, на то, что делают эти параметры, и какие здравые значения для них есть, не так много подробностей. Я действительно знаю, что размытость должна быть плавающей точкой от 0 до 1.0, а две другие - целыми числами.
Может ли кто-нибудь рекомендовать разумные значения "начальной точки" для этих параметров? Я уверен, что мне придется настраивать пробную версию и ошибку, но я просто искал значения шаров, чтобы правильно обрабатывать опечатки и орфографические ошибки.
Ответы
Ответ 1
В соответствии с Fuzzy Query doc значения по умолчанию 0.5
для min_similarity (который выглядит как ваш нечеткость), "неограниченный" для max_expansions и 0
для prefix_length.
Этот ответ поможет вам понять параметр min_similarity. 0.5
кажется хорошим началом.
prefix_length и max_expansions будут влиять на производительность: вы можете попробовать и разработать со значениями по умолчанию, но убедитесь, что они не будут масштабироваться (разработчики lucene даже рассматривали установку значения по умолчанию 2 для prefix_length). Я бы рекомендовал запустить тесты, чтобы найти правильные значения для вашего конкретного случая.
Ответ 2
Мне было полезно использовать нечеткий запрос, чтобы на самом деле использовать как термин-запрос, так и нечеткий запрос (с тем же термином), чтобы как получить результаты для опечаток, так и убедиться, что экземпляры введенного слова поиска оказались самыми высокими в результатах.
т.е.
{
"query": {
"bool": {
"should": [
{
"match": {
"_all": search_term
}
},
{
"match": {
"_all": {
"query": search_term,
"fuzziness": "1",
"prefix_length": 2
}
}
}
]
}
}
}
еще несколько деталей, перечисленных здесь: https://medium.com/@wampum/fuzzy-queries-ae47b66b325c