如何在 ElasticSearch 中查找所有重复的文档

use*_*297 3 duplicates elasticsearch

我们需要遍历 AWS ElasticSearch 集群 6.0 版中的所有文档,并收集所有重复用户 ID 的计数。我曾尝试使用数据可视化来汇总用户 ID 的计数并将其导出,但这些数字与我们可通过传统 SQL 搜索的另一个数据源不匹配。我们希望看到的是这样的: USER ID COUNT userid1 4 userid22 3 ... 我不是一个高级 Lucene 查询人员,还没有找到这个问题的答案。如果有人可以提供有关如何执行此操作的一些见解,我将不胜感激。

acl*_*kay 6

以下查询将对每个 id 进行计数,并过滤计数 <2 的 id,因此您将得到以下内容:

编号:2,计数:2

编号:4,计数:15

GET /index
{
    "query":{
        "match_all":{}
    },
    "aggs":{
        "user_id":{
            "terms":{
                "field":"user_id",
                "size":100000,
                "min_doc_count":2
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更多信息:https : //www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html


小智 5

如果你想获得所有重复的用户 ID 计数

首先你要知道 aggs 的最大尺寸。通过 aggs 基数查找所有最大匹配记录。

GET index/type/_search
{
   "size": 0,
   "aggs": {
      "maximum_match_counts": {
         "cardinality": {
            "field": "userid",
            "precision_threshold": 100
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

获取maximum_match_counts 聚合的值

现在您可以获得所有重复的用户 ID

GET index/type/_search
{
   "size": 0,
   "aggs": {
      "userIds": {
         "terms": {
            "field": "userid",
            "size": maximum_match_counts,
            "min_doc_count": 2
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)