У меня есть этот запрос
{
"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"}
}
}
}
Но я предпочитаю первый подход, если это возможно.
Есть идеи?
Ты можешь использовать 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"]}
}
}
}
}
Надеюсь это поможет!
multi_match принимает operator
флаг, который можно установить на or
,
{
"bool": {
"should": [
{
"multi_match": {
"query": "LAS VEGAS, HENDERSON",
"fields": ["city"],
"operator": "or"}
}
]
}
}