gpt4 book ai didi

elasticsearch - 在ElasticSearch中使用OR和AND的混合过滤器

转载 作者:行者123 更新时间:2023-12-03 02:08:47 26 4
gpt4 key购买 nike

您认为做以下事情的最佳方法是什么?

我想按OR过滤器中分组的多个范围来过滤ElasticSearch查询,然后按一个需要包含为AND过滤器的最终范围来进行过滤。解释有点cr脚,但希望下面的伪代码会有所帮助...

基本上,我尝试构造以下查询:

{
"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(boolean) 过滤器吗?

最佳答案

啊哈,在Boaz Leskes的帮助下,在ElasticSearch邮件列表中找到了答案!

它的结构应如下所示:

filter: {
bool: {
must: [
{
"numeric_range":{
"rating":{
"gte":"4"
}
}
}
],
should: [
{
"range":{
"price":{
"from":"10",
"to":"100"
}
}
},
{
"range":{
"price":{
"from":"100",
"to":"1000"
}
}
}
]
}
}

关于elasticsearch - 在ElasticSearch中使用OR和AND的混合过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com