在弹性搜索中查找索引中的唯一文档

时间:2019-03-28 11:09:34

标签: elasticsearch elastic-stack

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

1 个答案:

答案 0 :(得分:1)

Top hits聚合从完整结果集中查找值,而如果使用cardinality,则仅给出过滤后的结果集。 您可以使用cardinality聚合,如下所示:

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

此聚合带有一些责任,您可以找到下面的ElasticSearch文档,以更好地理解它。 链接:Cardinality Aggregation

要进行排序,可以参考以下示例,在该示例中,您可以按照创建存储桶的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"
                    }
                }
            }    
        }
    }
}