2016-02-25 71 views
2

我試圖在ElasticSearch中獲取不同的值及其數量。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 
      } 
     ] 

回答

5

您爲chickendog中的每一個獲得5個存儲桶的原因是因爲在索引它們時,您的文檔是analyzed

這意味着elasticsearch做了一些小的處理轉Chicken Dogchickendog(小寫,和記號化的空間)。你可以看到elasticsearch將如何分析給定一段文字轉換爲可搜索令牌使用Analyze API,例如:

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

爲了聚集在「原始」不同的值,你需要利用not_analyzed映射, elasticsearch不會執行其通常的處理。 This reference可能會有所幫助。您可能需要重新索引數據以應用not_analyzed映射來獲得所需的結果。

+1

非常感謝!這絕對是我正在尋找的,也是一個詳細而且非常好的答案。 – occurred