gpt4 book ai didi

elasticsearch - Elasticsearch 查询两个值-术语和范围?

转载 作者:行者123 更新时间:2023-12-02 22:44:29 25 4
gpt4 key购买 nike

我试图做一个查询,我想要基于两个值的文件-名称(字符串)和百分比(数字)。
例如-我想要那些具有“audience.location.countries.name” =“US”和“audience.location.countries.percentage”> 60的文档。所以我想要一个具有对象{“name”的文档: “美国”,“百分比”:“65”}
在此,“audience.location.countries”是具有两个属性-{“name”,“percentage”}的对象的数组。
这是一个示例文件:

"location": {
"countries": [
{
"name": "CA",
"percentage": 4
},
{
"name": "GB",
"percentage": 5
},
{
"name": "JP",
"percentage": 8
},
{
"name": "US",
"percentage": 60
}
]}

这是我尝试的查询,但它引发错误:“[和]查询格式错误,查询名称后没有start_object”
GET opensponsorship/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"isPublic": true
}
},
{
"term": {
"isDeleted": false
}
},
{
"and":[
{
"range": {
"audience.location.countries.name": "US"
}
},
{
"term":{
"audience.location.countries.percentage": {"gt": 59}
}
}
]
}
]
}
},
"size": "60",
"from": 0,
"sort": [
{
"followers": {
"order": "desc"
}
}
]
}

我是 flex 搜索的新手,知识非常有限。有人可以帮忙吗?

最佳答案

从我可以看出,该查询在多个帐户中“中断”:

  • 您使用deprecated and query(顺便说一句,您使用的是哪个ES版本?)
  • rangeterm字段上的namepercentage过滤器混合使用
  • 字段audience.location.countries应为“nested object

  • 以下是可解决问题1和2的查询。然后,我将说明问题3:
    GET opensponsorship/_search
    {
    "query": {
    "bool": {
    "filter": [
    {
    "term": {
    "isPublic": true
    }
    },
    {
    "term": {
    "isDeleted": false
    }
    },
    {
    "term": {
    "audience.location.countries.name": "US"
    }
    },
    {
    "range": {
    "audience.location.countries.percentage": {
    "gt": 59
    }
    }
    }
    ]
    }
    },
    "size": "60",
    "from": 0,
    "sort": [
    {
    "followers": {
    "order": "desc"
    }
    }
    ]
    }

    关于问题3,建议您在Elasticsearch中阅读 nested fields
    简而言之-如果 audience.location.countries不是嵌套对象,则由于Elastic“展平”对象的方式,您将获得“假阳性”结果。
    要解决此问题,您需要1)在映射中将 audience.location.countries设置为嵌套对象类型,并2)以以下方式用嵌套查询包装 contries术语过滤器:
    GET opensponsorship/_search
    {
    "query": {
    "bool": {
    "filter": [
    {
    "term": {
    "isPublic": true
    }
    },
    {
    "term": {
    "isDeleted": false
    }
    },
    {
    "nested": {
    "path": "audience.location.countries",
    "query": {
    "bool": {
    "filter": [
    {
    "term": {
    "audience.location.countries.name": "US"
    }
    },
    {
    "range": {
    "audience.location.countries.percentage": {
    "gt": 59
    }
    }
    }
    ]
    }
    }
    }
    }
    ]
    }
    },
    "size": "60",
    "from": 0,
    "sort": [
    {
    "followers": {
    "order": "desc"
    }
    }
    ]
    }

    希望这可以帮助。祝好运!

    关于elasticsearch - Elasticsearch 查询两个值-术语和范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877670/

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