-1
私は2.3.1をElasticsearchするには、以下のクエリを持っている:elasticsearchでandとorとfilterの順序が重要なのはなぜですか?
{
"query": {
"bool": {
"must": {
"query": {
"multi_match": {
"query": "my search",
"type": "cross_fields",
"fields": ["field1^6", "field2", "field3^2", "field4"],
"operator": "and",
"zero_terms_query": "all"
}
}
}
},
"filter": {
"or": [{
"term": {
"pickup": true
}
}, {
"term": {
"local_delivery": true
}
}],
"and": [{
"term": {
"field5": true
}
}, {
"term": {
"field6": "my_value"
}
}]
}
}
}
}
このクエリは、11Kの結果を返します。 orとandの順序を次のように切り替えると:
{
"query": {
"bool": {
"must": {
"query": {
"multi_match": {
"query": "my search",
"type": "cross_fields",
"fields": ["field1^6", "field2", "field3^2", "field4"],
"operator": "and",
"zero_terms_query": "all"
}
}
}
},
"filter": {
"and": [{
"term": {
"field5": true
}
}, {
"term": {
"field6": "my_value"
}
}],
"or": [{
"term": {
"pickup": true
}
}, {
"term": {
"local_delivery": true
}
}]
}
}
}
}
私は突然675の結果しか持っていません。
これらのクエリはまったく同じではありませんか?本質的には、field5をtrue、field6をmy_valueにするようにクエリをフィルタリングしたい。しかし、私はまたそう、ピックアップやlocal_deliveryのいずれかに該当することにしたい:ブールクエリを使用して
(field5 == true && field6 == "my_value" || (pickup == true || local_delivery == true))