2014-09-25 49 views
1

我們的索引文檔沒有完全固定的模式,也就是說,並非每個字段都在每個文檔中。有沒有一種方法可以基於一組文檔中的字段(即對查詢做出響應)創建存儲區,並計算多少個文檔包含這些字段?舉例來說,我只是做了這些文件包括查詢的結果:使用Elasticsearch按字段出現在退回文檔中

{"name":"Bob","field1":"value","field2":"value2","field3":"value3"} 
{"name":"Sue","field2":"value4","field3":"value5"} 
{"name":"Ali","field1":"value6","field2":"value7"} 
{"name":"Joe","field3":"value8"} 

這是我想提取的信息(不格式):

name: 4 
field1: 2 
field2: 3 
field3: 3 

有沒有一種方法可以讓我聚合並計數以獲得這些結果?

回答

1

是啊,我覺得你可以做這樣的:

GET /some_index/some_type/_search?search_type=count 
{ 
    "aggs": { 
    "name_bucket": { 
     "filter" : { "exists" : { "field" : "name" } } 
    }, 
    "field1_bucket": { 
     "filter" : { "exists" : { "field" : "field1" } } 
    }, 
    "field2_bucket": { 
     "filter" : { "exists" : { "field" : "field2" } } 
    }, 
    "field3_bucket": { 
     "filter" : { "exists" : { "field" : "field3" } } 
    } 
    } 
} 

,你會得到這樣的事情:

"aggregations": { 
     "field3_bucket": { 
     "doc_count": 3 
     }, 
     "field1_bucket": { 
     "doc_count": 2 
     }, 
     "field2_bucket": { 
     "doc_count": 3 
     }, 
     "name_bucket": { 
     "doc_count": 4 
     } 
    } 
+0

謝謝,我給一個去。我一直在尋找腳本作爲動態發現字段名稱的手段,但這更直接。我們的模式不是隨機的,所以我們知道可能的字段集合,即使每個文檔都沒有每個字段。 – Paul 2014-09-26 12:06:25

相關問題