Глядя на ваш существующий запрос, вы ищете сочетание
- Повышение на основе поля
- Совпадение в нескольких полях
- Соответствие фраз
- Нечеткое совпадение
Если это не phrase_match
, вы можете просто добавить "fuzziness": "AUTO"
или "fuzziness":1 or whatever number based on your requirement
в существующий запрос, и вы получите то, что ищете.
Нечеткий без фразы
POST <your_index_name>/_search
{
"query":{
"bool":{
"must":[
{
"function_score":{
"query":{
"multi_match":{
"query":"local",
"fields":[
"user.name^3",
"main_product"
],
"fuzziness":"AUTO"
}
}
}
}
],
"filter":{
"geo_distance":{
"distance":"1000km",
"user.geolocation":{
"lat":25.55,
"lon":-84.44
}
}
}
}
}
}
Нечеткий с фразой:
В этом случае вам необходимо использовать Span Queries
Я просто отбросил фильтрующую часть ради простоты и предложил следующий запрос.И скажем, что я ищу фразу с именем pearl jam
.
POST <your_index_name>/_search
{
"query":{
"function_score":{
"query":{
"bool":{
"should":[
{
"bool":{
"boost":3,
"must":[
{
"span_near":{
"clauses":[
{
"span_multi":{
"match":{
"fuzzy":{
"user.name":"pearl"
}
}
}
},
{
"span_multi":{
"match":{
"fuzzy":{
"user.name":"jam"
}
}
}
}
],
"slop":0,
"in_order":true
}
}
]
}
},
{
"bool":{
"boost":1,
"must":[
{
"span_near":{
"clauses":[
{
"span_multi":{
"match":{
"fuzzy":{
"main_product":"pearl"
}
}
}
},
{
"span_multi":{
"match":{
"fuzzy":{
"main_product":"jam"
}
}
}
}
],
"slop":0,
"in_order":true
}
}
]
}
}
]
}
}
}
}
}
Итак, я делаю усиление на основе полей в многопольном словосочетании с нечетким соответствием для фразы.называется pearl jam
.
Наличие slop: 0
и in_order:true
позволило бы мне сопоставить фразы для слов, которые я указал в предложениях.
Дайте мне знать, если у вас есть какие-либо вопросы.