【问题标题】:Aggregation distinct values in ElasticSearch在 ElasticSearch 中聚合不同的值
【发布时间】:2016-02-26 05:55:16
【问题描述】:

我正在尝试在 ElasticSearch 中获取不同的值及其数量。

这可以通过以下方式完成:

"distinct_publisher": {
        "terms": {
            "field": "publisher", "size": 0
        }
    }

我遇到的问题是它计算条款,但如果发布者中有值通过空格分隔,例如: “鸡狗” 并且 5 个文档在发布者字段中具有此值,然后我得到 5 个鸡和 5 个狗:

"buckets" : [
            {
                "key" : "chicken",
                "doc_count" : 5
            },
            {
                "key" : "dog",
                "doc_count" : 5
            },
            ...
        ]

但我想得到这样的结果:

"buckets" : [
            {
                "key" : "Chicken Dog",
                "doc_count" : 5
            }
        ]

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    chickendog 分别获得 5 个存储桶的原因是,在您为它们编制索引时,您的文档是 analyzed

    这意味着 elasticsearch 做了一些小的处理来将 Chicken Dog 转换为 chickendog(小写,并在空间上标记化)。您可以通过使用 Analyze API 来查看 elasticsearch 如何将给定的文本分析为可搜索的标记,例如:

    curl -XGET 'localhost:9200/_analyze?&text=Chicken+Dog'
    

    为了聚合“原始”不同的值,您需要使用not_analyzed 映射,这样elasticsearch 就不会进行通常的处理。 This reference 可能会有所帮助。您可能需要重新索引您的数据以应用 not_analyzed 映射以获得您想要的结果。

    【讨论】:

    • 非常感谢!这绝对是我想要的,也是一个详细而非常好的答案。
    猜你喜欢
    • 2017-01-06
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2016-04-12
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多