大家好??不确定标题是否足够清楚,所以我将直接跳到我的例子。
我的索引里有一些车,而且都有品牌和型号。我正在做计数查询,我想计算所有的组合。让我们看看下面的查询:
{
"query": {
"bool": {
"filter": [
{
"terms": {
"model": [
"a5",
"a4"
]
}
},
{
"terms": {
"make": [
"audi",
"bmw"
]
}
}
]
}
}
}
这很管用,但不是我想要的。品牌和型号之间没有关系,但我想有一种关系,因为 a5
以及 a4
只与 audi
,不是 bmw
,这就是我得到错误结果的原因。它应该算上一切 a4
以及 a5
奥迪和所有的宝马,不管他们是哪种型号的,但我只计算奥迪,因为没有 a4
以及 a5
在宝马车里。
理想情况下,我会使用这样的方法:
"filter": [
{
"terms": {
"model": [
"a5",
"a4"
],
"make": ["audi"]
}
},
{
"terms": {
"make": [
"bmw"
]
}
}
]
但由于es错误,这是不可能的: [terms] query does not support multiple fields
.
如果你们中的一些人能解决我遇到的问题,我将不胜感激。提前谢谢!
1条答案
按热度按时间bqujaahr1#
你需要的是
(make:audi AND model:a4|a5) OR make:bmw
可以重写为should
一个的must
的terms
和一个独立的term
查询: