Нечеткое преобразование не имеет ничего общего с тем, что у вас есть. Это не относится к вашему сценарию. Как упомянуто в ссылке, он решает сценарий, в котором, если ваш запрос ab
, он вернет транспонированных результатов, т.е. ba
.
Я попробовал сценарий, который вы упомянули, и, насколько я понимаю, вы можете использовать Ngram или Edge Ngram токенайзер для своих полей.
Как упомянуто в ссылке Edge Ngram, допустим, у нас есть следующее отображение:
PUT my_fuzzy_index
{
"mappings":{
"mydocs":{
"properties":{
"title":{
"type":"text",
"analyzer":"my_analyzer"
},
"desc":{
"type":"text",
"analyzer":"my_analyzer"
}
}
}
},
"settings":{
"analysis":{
"analyzer":{
"my_analyzer":{
"tokenizer":"my_tokenizer"
}
},
"tokenizer":{
"my_tokenizer":{
"type":"edge_ngram",
"min_gram":2,
"max_gram":5,
"token_chars":[
"letter",
"digit"
]
}
}
}
}
}
Давайте выполним следующий Анализ запроса сейчас:
POST my_fuzzy_index/_analyze
{
"analyzer": "my_analyzer",
"text": "games"
}
Когда вы сделаете это, вы увидите, что в ответе будут созданы следующие токены. Это означает, что ваш инвертированный индекс будет иметь следующие слова.
ga, gam, game, games
Теперь, если вы выполняете поиск с помощью fuzziness: 1
, он фактически применяет тот же самый анализатор во время запроса, что означает, что он также будет возвращать результаты вышеупомянутых токенов и его нечетких братьев и сестер, имеющих правку расстояние 1 (gam
и с расстоянием редактирования 1, также будет возвращено cam
).
То, что вы могли бы использовать, используйте standard analyzer
в своем поисковом запросе, как показано ниже, однако обратите внимание, что нечеткость все еще применяется, например. он вернет результаты со словом james
, если ваш запрос games
, так как fuzziness
установлен на 1
, но он покончит с поиском слов, длина которых меньше n-1 вашего запроса .
POST my_fuzzy_index/_search
{
"query": {
"multi_match": {
"query": "games",
"fields": ["*"],
"fuzziness": 1,
"analyzer": "standard" <---- this field here
}
}
}
И если то, что вы ищете, это вернуть похожие результаты, например, как game, games, gaming
, тогда пропустите понятие нечеткого поиска и используйте понятие Stemmer .
Весь смысл использования нечеткости состоит в том, чтобы показать вам некоторые нетрадиционные результаты, например, управлять орфографическими ошибками, искать на основе имен пользователей / кодов продуктов и т. д. Таким образом, в основном то, что вы наблюдаете, работает правильно в соответствии с определением нечеткости. Эта ссылка должна помочь вам лучше понять нечеткость.
Надеюсь, это поможет!