Нечеткое сопоставление в Elasticsearch дает разные результаты в двух разных версиях

#elasticsearch #fuzzy-search

#эластичный поиск #нечеткий поиск

Вопрос:

У меня есть отображение в elasticsearch с анализатором полей, имеющим маркер:

 "tokenizer": {  "3gram_tokenizer": {  "type": "nGram",  "min_gram": "3",  "max_gram": "3",  "token_chars": [  "letter",  "digit"  ]  }  }  

теперь я пытаюсь найти имя = «avinash» в Elasticsearch с помощью запроса = «acinash».

Сформированный запрос является:

 {  "size": 5,  "query": {  "bool": {  "must": [  {  "multi_match": {  "query": "acinash",  "fields": [  "name"  ],  "type": "best_fields",  "operator": "AND",  "slop": 0,  "fuzziness": "1",  "prefix_length": 0,  "max_expansions": 50,  "zero_terms_query": "NONE",  "auto_generate_synonyms_phrase_query": false,  "fuzzy_transpositions": false,  "boost": 1.0  }  }  ],  "adjust_pure_negative": true,  "boost": 1.0  }  } }  

Но в версии ES 6.8 я получаю желаемый результат(из-за нечеткости), т. е. «avinash», от запроса «acinash», но в версии ES 7.1 я не получаю результат.

То же самое происходит при попытке поиска «avinash» с помощью «avinaah» в 6.8 я получаю результаты, но в 7.1 я не получаю результатов

Что делает ES, так это преобразует его в токены :[aci, cin, ina, nas, ash], которые в идеале должны совпадать с маркированным инвертированным индексом в ES с токенами : [avi, vin, ina, nas, ash].

Но почему он не совпадает в 7.1?

Ответ №1:

Это не связано с версией ES.

Обновите max_expansions до более чем 50.

max_expansions : Maximum number of variations created.

С 3-граммовыми буквами и цифрами в качестве символов token_chars идеальное максимальное расширение будет (26 алфавитов 10 цифр) * 3