我的数据库表列如下:
身份证明Biz名字\许可证#违规..。
我需要找出那些有超过5次违规行为的企业。
我有以下几点:
{
"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个或更多许可证#的企业。
我不知道如何进一步总结这一点。
谢谢!
发布于 2021-03-13 21:26:07
让我们假设您的License #字段的定义与Biz Name 一样,并且有一个映射。
现在,声明:
找到拥有.3或更多许可证#s的企业
可改为:
由
business name聚合,条件是桶形license IDs的不同值的个数大于或等于3。
其次,“在条件下聚合”的机制是方便的 ,它执行脚本以确定当前迭代的桶是否将保留在最后的聚合中。
同时利用这两者将意味着:
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"
}
}
}
}
}
}仅此而已!
https://stackoverflow.com/questions/66602013
复制相似问题