ElasticSearch

时间:2016-02-25 19:17:03

标签: elasticsearch

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

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

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

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

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

但我希望得到结果:

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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