在您看来,最好的方法是做什么?
我想通过在OR过滤器中分组的几个范围过滤ElasticSearch查询,然后按需要作为AND过滤器包含的一个最终范围过滤 . 解释有点蹩脚,但希望下面的伪代码有助于......
基本上我尝试构建以下查询:
{
"query":{
"multi_match":{
"query":"blue",
"fields":[
"name"
]
}
},
"sort":{
"_score":{
"order":"desc",
"missing":"_last"
}
},
"from":"0",
"size":"24",
"facets":{
"rating":{
"range":{
"field":"rating",
"ranges":[
{
"from":1
},
{
"from":2
},
{
"from":3
},
{
"from":4
}
]
}
},
"price":{
"range":{
"field":"price",
"ranges":[
{
"to":10
},
{
"from":10,
"to":100
},
{
"from":100,
"to":1000
}
{
"from":1000
}
]
}
}
},
"filter":{
"or":[
{
"range":{
"price":{
"from":"10",
"to":"100"
}
}
},
{
"range":{
"price":{
"from":"100",
"to":"1000"
}
}
}
],
"and":{
"numeric_range":{
"rating":{
"gte":"4"
}
}
}
}
}
这失败了,错误是“没有元素[numeric_range]的解析器” . 所以我尝试更换:
"and":{
"numeric_range":{
"rating":{
"gte":"4"
}
}
}
有:
"numeric_range":{
"rating":{
"gte":"4"
}
}
查询现在返回结果,但它返回结果,价格范围为10-100,100-1000,任意结果的评级大于4(即使它们的价格超出定义的范围) .
有关如何进行此查询的任何线索?我需要使用bool过滤器吗?
1 回答
啊,哈哈,在Boaz Leskes的帮助下,在ElasticSearch邮件列表上找到了它!
它的结构应该是这样的: