首页 > 解决方案 > 在弹性搜索的索引中查找唯一文档

问题描述

我的索引中有重复条目,我只想找出索引中的唯一文档。TopHits 聚合解决了这个问题,但我的另一个要求是支持对结果进行排序(跨桶)。因此我不能使用热门点击聚合。
我能想到的其他选择是编写插件或使用无痛脚本。需要帮助来解决这个问题。如果您可以将我重定向到一些示例,那就太好了。

标签: elasticsearchelastic-stack

解决方案


Top hits聚合从完整结果集中查找值,而如果使用cardinality它只给出过滤结果集。您可以使用cardinality如下聚合:

{
    "aggs" : {
        "UNIQUE_COUNT" : {
            "cardinality" : {
                "field" : "your_field"
            }
        }
    }
}

这种聚合带有一些责任,你可以找到下面的 ElasticSearch 文档来更好地理解它。链接:基数聚合

对于排序,您可以参考以下示例,您可以在terms其中按照创建存储桶的顺序传递聚合:

{
    "aggs": {
        "AGG_NAME": {
            "terms": {
                "field": "you_field",
                "size": 10,
                "order": {
                    "UNIQUE_COUNT.doc_count": "asc"
                },
                "min_doc_count": 1
            },
            "aggs": {
                "UNIQUE_COUNT": {
                    "cardinality": {
                        "field": "your_field"
                    }
                }
            }    
        }
    }
}

推荐阅读