Как сгруппировать запрос по одному или нескольким словам вasticsearch?

У меня есть этот запрос

    {
"bool": {
"should": [
{
"multi_match": {
"query": "LAS VEGAS, HENDERSON",
"fields": ["city"]
}
}
]
}
}

это возвращает:

"city": "LAS VEGAS",
"city": "LAS CRUCES",
"city": "HENDERSON",

Обратите внимание LAS CRUCES результат. Я не хочу этого

Один из способов — написать так:

      "bool": {
"should": [
{
"match": {
"city": {
"query": "LAS VEGAS",
"operator": "and"}
}
},
{
"match": {
"city": {
"query": "HENDERSON",
"operator": "and"}
}
}
}

Но я предпочитаю первый подход, если это возможно.

Есть идеи?

0

Решение

Ты можешь использовать query_string запрос, как показано ниже:

GET /_search
{
"query": {
"query_string" : {
"fields" : ["city"],
"query" : "\"LAS VEGAS\" OR \"HENDERSON\""}
}
}

Вам нужно заключить значения в кавычки, чтобы найти точную фразу.

Если вы используете city поле для поиска точных совпадений, то вы должны рассмотреть возможность изменения его типа отображения с text в keyword, Это принесет вам хорошую производительность.

Если твой city поле имеет тип keyword тогда вы можете достичь тех же результатов, используя terms query как показано ниже:

GET /_search
{
"query": {
"constant_score" : {
"filter" : {
"terms" : { "city" : ["LAS VEGAS", "HENDERSON"]}
}
}
}
}

Надеюсь это поможет!

0

Другие решения

multi_match принимает operator флаг, который можно установить на or,

   {
"bool": {
"should": [
{
"multi_match": {
"query": "LAS VEGAS, HENDERSON",
"fields": ["city"],
"operator": "or"}
}
]
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector