我们需要遍历AWS ElasticSearch集群6.0版中的所有文档,并收集所有重复用户ID的计数。 我尝试使用数据可视化来聚合用户ID的计数并导出它们,但这些数字与我们可通过传统SQL搜索的其他数据源不匹配。 我们希望看到的是这样的: 用户ID计数 userid1 4 userid22 3 ... 我不是一个高级的Lucene查询人,还没有找到这个问题的答案。如果有人能够提供一些有关如何做到这一点的见解,我将非常感激。
答案 0 :(得分:4)
如果您想获得所有重复的用户ID,请使用count
首先你要了解aggs的最大尺寸。 通过aggs cardinality找到所有最大匹配记录。
GET index/type/_search
{
"size": 0,
"aggs": {
"maximum_match_counts": {
"cardinality": {
"field": "userid",
"precision_threshold": 100
}
}
}
}
获取maximum_match_counts聚合的值
现在您可以获得所有重复的用户标识
GET index/type/_search
{
"size": 0,
"aggs": {
"userIds": {
"terms": {
"field": "userid",
"size": maximum_match_counts,
"min_doc_count": 2
}
}
}
}
答案 1 :(得分:0)
以下查询将计算每个ID,并过滤具有< 2计数的ID,因此您将获得以下内容:
id:2,count:2
id:4,count:15
GET /index
{
"query":{
"match_all":{}
},
"aggs":{
"user_id":{
"terms":{
"field":"user_id",
"size":100000,
"min_doc_count":2
}
}
}
}
答案 2 :(得分:0)
我假设一旦发现重复的USER ID,您可能想对它们进行处理,因此,我建议的方法不仅会计算重复的ID,还会维护一份清单,列出哪些文件是给定的重复项用户身份。
一种可能的方法是编写一个脚本来读取您的Elasticsearch索引中的所有文档,并创建一个数据结构,该数据结构存储与每个USER ID对应的文档列表。创建列表后,您只需读取每个列表的大小即可获取与该USER ID对应的COUNT个文档。我写了blog post,其中详细介绍了此方法。
免责声明:我是Elastic的一名咨询工程师。
答案 3 :(得分:0)
当您使用术语聚合(建议使用Bharat)并且将聚合大小设置为超过10K时,您会收到有关此方法的警告,这会在功能发布时引发错误。
与其使用术语汇总,不如使用composite aggregation来通过分页/加密钥方法扫描所有文档。
复合聚合可用于从多级聚合有效地对所有存储桶进行分页。这种聚合提供了一种方式来流传输特定聚合的所有存储桶,类似于滚动对文档所做的操作。