如何通过字段名称在弹性搜索中获取重复的字段值,而不知道其值

Muk*_*esh 7 elasticsearch

我在弹性搜索索引中有一个字段"EmployeeName" - 我想执行一个查询,它将返回所有存在重复值"EmployeeName"的情况.可以这样做吗?

我发现more_like_this但这需要"like_text"的字段值.但我的要求是在不知道其价值的情况下获取具有重复名称的员工名单.

{
    "more_like_this" : {
        "fields" : ["EmployeeName"],
        "like_text" : "Mukesh",
        "min_term_freq" : 1,
        "max_query_terms" : 12
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

关心穆克什

bit*_*kar 13

你可以用Terms Aggregation它.

POST <index>/<type>/_search?search_type=count
{
    "aggs": {
        "duplicateNames": {
            "terms": {
                "field": "EmployeeName",
                "size": 0,
                "min_doc_count": 2
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将返回EmployeeName至少2个文档中出现的字段的所有值.

  • 还要注意1)这个方法只有在你的映射中`EmployeeName`是'not_analyzed`时才有效; 2)你不知道哪些文件是重复的,只是有重复的文件. (3认同)
  • 我同意@Val你可以使用热门命中聚合作为聚合术语的子聚合.这样就可以返回文件了. (2认同)

小智 10

这将是当前 Elasticsearch 版本的查询:

GET <index>/_search
{
  "size": 0,
  "aggs": {
    "duplicateNames": {
       "terms": {
         "field": "EmployeeName",
         "min_doc_count": 2
       }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)