Elasticsearch DSL с несколькими запросами multi_match в ruby
У меня есть этот сценарий, в котором есть два поиска multi_match в одном запросе. Проблема в том, что когда я создаю JSON для него в ruby, кажется, что json с неуникальными ключами невозможен, поэтому появляется только один из них.
Вот мой запрос:
{
"fields": ["id", "title",
"address.city", "address.state", "address.country", "address.state_code", "address.country_code", "proxy_titles", "location"],
"size":2,
"query":{
"filtered":{
"filter": {
"range": {
"custom_score": {
"gte": 100
}
}
},
"query":{
"bool": {
"must": {
"multi_match":{
"query": "term 1",
"type": "cross_fields",
"fields": ["title^2", "proxy_titles^2","description"]
}
},
"must": {
"multi_match": {
"query": "us",
"fields": ["address.city", "address.country", "address.state",
"address.zone", "address.country_code", "address.state_code", "address.zone_code"]
}
}
}
}
}
},
"sort": {
"_score": { "order": "desc" },
"variation": {"order": "asc"},
"updated_at": { "order": "desc" }
}
}
Я также только недавно начал использовать asticsearch, поэтому было бы очень полезно, если бы вы могли предложить мне лучший запрос, чтобы выполнить то же самое.
1 ответ
Решение
У вас неправильный синтаксис. Для нескольких "must"
значения в "bool"
, они должны быть в массиве. К сожалению, документация не всегда очень полезна ( страница запроса bool показывает это для "should"
но нет "must"
).
Попробуй это:
{
"fields": ["id","title","address.city","address.state","address.country","address.state_code","address.country_code","proxy_titles","location"],
"size": 2,
"query": {
"filtered": {
"filter": {
"range": {
"custom_score": {
"gte": 100
}
}
},
"query": {
"bool": [
{
"must": {
"multi_match": {
"query": "term 1",
"type": "cross_fields",
"fields": ["title^2","proxy_titles^2","description"]
}
}
},
{
"must": {
"multi_match": {
"query": "us",
"fields": ["address.city","address.country","address.state","address.zone","address.country_code","address.state_code","address.zone_code"]
}
}
}
]
}
}
},
"sort": {
"_score": {
"order": "desc"
},
"variation": {
"order": "asc"
},
"updated_at": {
"order": "desc"
}
}
}