首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有条件的Elasticsearch子聚合

具有条件的Elasticsearch子聚合
EN

Stack Overflow用户
提问于 2021-03-12 14:41:41
回答 1查看 662关注 0票数 2

我的数据库表列如下:

身份证明Biz名字\许可证#违规..。

我需要找出那些有超过5次违规行为的企业。

我有以下几点:

代码语言:javascript
复制
{
   "query": {
       "bool": {
         "must": {
            "match": {
              "violations": {
                "query": "MICE DROPPINGS were OBSERVED",
                "operator": "and"
              }
            }
          },
          "must_not": {
            "match": {
              "violations": {
                "query": "NO MICE DROPPINGS were OBSERVED",
                "operator": "and"
              }
            }
          }
        }
      }
    },

    "aggs" : {
          "selected_bizs" :{
                 "terms" : {
                      "field" : "Biz Name.keyword",
                                "min_doc_count": 5,
                                "size" :1000
                           },
                      "aggs": {
                          "top_biz_hits": {
                          "top_hits": {
                              "size": 10
                              }
                          }
                      }
                 }
            }
       }

看上去很管用。

现在,我需要找出那些有5个或更多违规行为的企业(如上文),以及有3个或更多许可证#的企业。

我不知道如何进一步总结这一点。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-13 21:26:07

让我们假设您的License #字段的定义与Biz Name 一样,并且有一个映射

现在,声明:

找到拥有.3或更多许可证#s的企业

可改为:

business name聚合,条件是桶形license IDs不同值的个数大于或等于3。

这样,您就可以使用 来获得不同的许可ID。

其次,“在条件下聚合”的机制是方便的 ,它执行脚本以确定当前迭代的桶是否将保留在最后的聚合中。

同时利用这两者将意味着:

代码语言:javascript
复制
POST your-index/_search
{
  "size": 0, 
  "query": {
    "bool": {
      "must": {
        "match": {
          "violations": {
            "query": "MICE DROPPINGS were OBSERVED",
            "operator": "and"
          }
        }
      },
      "must_not": {
        "match": {
          "violations": {
            "query": "NO MICE DROPPINGS were OBSERVED",
            "operator": "and"
          }
        }
      }
    }
  },
  "aggs": {
    "selected_bizs": {
      "terms": {
        "field": "Biz Name.keyword",
        "min_doc_count": 5,
        "size": 1000
      },
      "aggs": {
        "top_biz_hits": {
          "top_hits": {
            "size": 10
          }
        },
        "unique_license_ids": {
          "cardinality": {
            "field": "License #.keyword"
          }
        },
        "must_have_min_3_License #s": {
          "bucket_selector": {
            "buckets_path": {
              "unique_license_ids": "unique_license_ids" 
            },
            "script": "params.unique_license_ids >= 3"
          }
        }
      }
    }
  }
}

仅此而已!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66602013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档