Настройки нечеткости в 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