ElasticSearch基数聚合异常

osh3o9ms  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(156)

我目前正在将ES集群从版本6更新到版本7,在版本7中引入了一个突破性的更改,其中丢失文档值将引发错误。我的目标是更改这个查询并选择存在这些值的所有文档,这应该可以解决我的问题。如何将must not containmust contain添加到此查询以实现我的目标?

{
       "query":{
          "bool":{
             "must":[
                {
                   "terms":{
                      "state":[
                         "pending",
                         "queued",
                         "deferred"
                      ]
                   }
                },
                {
                   "terms":{
                      "tenant_tag":[
                         "prod"
                      ]
                   }
                }
             ]
          }
       },
       "aggs":{
          "count":{
             "cardinality":{
                "script":"doc['user_id'].value + '_' + doc['campaign_id'].value"
             }
          }
       }
    }
yftpprvb

yftpprvb1#

我会像这样重写您的查询:

{
       "query":{
          "bool":{
             "filter":[
                {
                  "exists": { "field": "user_id" }
                },
                {
                  "exists": { "field": "campaign_id" }
                },
                {
                   "terms":{
                      "state":[
                         "pending",
                         "queued",
                         "deferred"
                      ]
                   }
                },
                {
                   "terms":{
                      "tenant_tag":[
                         "prod"
                      ]
                   }
                }
             ]
          }
       },
       "aggs":{
          "count":{
             "cardinality":{
                "script":"doc['user_id'].value + '_' + doc['campaign_id'].value"
             }
          }
       }
    }

理想情况下,您应该预先计算文档中的userid_campaignid字段,这样就不必使用脚本聚合,因为脚本聚合的性能很糟糕,特别是因为基数本身可能已经很糟糕了。

相关问题