ElasticSearch中的聚合不同值

occ*_*red 2 elasticsearch

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

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

"distinct_publisher": {
        "terms": {
            "field": "publisher", "size": 0
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是它计算了条款,但是如果出版商中的值通过空格分隔,例如:"鸡狗"和5个文件在发布商字段中有此值,那么我得到5为鸡,5为狗:

"buckets" : [
            {
                "key" : "chicken",
                "doc_count" : 5
            },
            {
                "key" : "dog",
                "doc_count" : 5
            },
            ...
        ]
Run Code Online (Sandbox Code Playgroud)

但我希望得到结果:

"buckets" : [
            {
                "key" : "Chicken Dog",
                "doc_count" : 5
            }
        ]
Run Code Online (Sandbox Code Playgroud)

小智 5

你得到5桶每个的原因chickendog是因为你的文件进行分析,在您索引他们的时间.

这意味着elasticsearch做了一些小的加工转Chicken Dogchickendog(小写和记号化的空间).您可以看到elasticsearch如何使用Analyze API将给定的文本分析为可搜索的标记,例如:

curl -XGET 'localhost:9200/_analyze?&text=Chicken+Dog'
Run Code Online (Sandbox Code Playgroud)

为了聚合"原始"不同值,您需要利用not_analyzed映射,因此elasticsearch不会进行常规处理.此参考可能有所帮助.您可能需要重新索引数据以应用not_analyzed映射以获得所需的结果.