gpt4 book ai didi

elasticsearch - ElasticSearch:基于字段值的条件过滤器

转载 作者:行者123 更新时间:2023-12-02 23:30:41 26 4
gpt4 key购买 nike

任务听起来很简单:
如果文档字段等于特定值,请添加过滤器,否则不应用过滤器。

F.x.从仓库中获取所有水果,但如果fruit.type是apple,请在7天前交货。

在 flex 水平上可以做到吗?

先感谢您。

最佳答案

在elassticsearch中,可以使用Nesting Boolean Queriesrange -sugar和date-math -magic来执行此操作。

由于您没有发布映射或一些示例数据,因此我将仅使用以下数据:

curl -XPOST http://localhost:9200/testing/foo/ -d '{ "fruit" : "orange", "delivered" : "2016-04-22"}'
curl -XPOST http://localhost:9200/testing/foo/ -d '{ "fruit" : "banana", "delivered" : "2016-03-22"}'
curl -XPOST http://localhost:9200/testing/foo/ -d '{ "fruit" : "orange", "delivered" : "2016-04-12"}'
curl -XPOST http://localhost:9200/testing/foo/ -d '{ "fruit" : "apple", "delivered" : "2016-04-12"}'
curl -XPOST http://localhost:9200/testing/foo/ -d '{ "fruit" : "apple", "delivered" : "2016-04-20"}'

然后,以下查询将执行您想要的操作:
curl -XGET "http://localhost:9200/testing/foo/_search" -d'
{
"query": {
"constant_score": {
"filter": {
"bool": {
"should": [
{
"bool": {
"must_not": {
"term": {
"fruit": "apple"
}
}
}
},
{
"bool": {
"must": [
{
"term": {
"fruit": "apple"
}
},
{
"range": {
"delivered": {
"lt": "now-7d"
}
}
}
]
}
}
]
}
}
}
}
}'

在SQL中,这大致翻译为:
WHERE fruit <> 'apple' OR (fruit = 'apple' AND delivered < Now-7d)

关于elasticsearch - ElasticSearch:基于字段值的条件过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763691/

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