我正在尝试在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
}
]
答案 0 :(得分:5)
您为chicken
和dog
分别获得5个存储桶的原因是因为您的文档在编制索引时为analyzed。
这意味着elasticsearch做了一些小的处理,将Chicken Dog
转换为chicken
和dog
(小写,并在空格上标记)。您可以看到elasticsearch如何使用Analyze API将给定的文本分析为可搜索的标记,例如:
curl -XGET 'localhost:9200/_analyze?&text=Chicken+Dog'
为了聚合“原始”不同值,您需要使用not_analyzed
映射,因此elasticsearch不会执行常规处理。 This reference可能有所帮助。您可能需要重新索引数据以应用not_analyzed映射以获得所需的结果。