2015-04-15 36 views
0

我寫的elasticsearch查詢下面的情形:Elasticsearch:過濾頭文件爲每一個獨特的ID

- field1 field2 
- 2015  20 
- 2015  14 
- 2014  39 
- 2013  76 
- 2013  2 
- 2013  55 

我想找到的field2總和爲每一個獨特field1這樣field2對於field1最大。 例如在這種情況下,我想要value = 20 + 39 + 76

什麼是將返回此值的elasticsearch查詢?

+0

你可以發佈你的代碼,並在哪裏失敗? –

+0

我是elasticsearch的新手,對於如何爲這個問題編寫彈性搜索查詢沒有太多想法。 – asurana2

回答

0

我不認爲這是可能的elasticsearch 1.x與一個單一的查詢。 在2.0中,我們可能會有這樣一個功能,如減速器(請參閱:https://github.com/elastic/elasticsearch/issues/8110)。

你可以讓你的任務(由FIELD1分組的場2最大值)這樣的第一部分:

DELETE /test_index 

PUT /test_index 
{ 
    "settings": { 
     "number_of_shards": 1 
    } 
} 

POST /test_index/_bulk 
{"index":{"_index":"test_index","_type":"doc","_id":1}} 
{"field1":2015,"field2":20} 
{"index":{"_index":"test_index","_type":"doc","_id":2}} 
{"field1":2015,"field2":14} 
{"index":{"_index":"test_index","_type":"doc","_id":3}} 
{"field1":2014,"field2":39} 
{"index":{"_index":"test_index","_type":"doc","_id":4}} 
{"field1":2013,"field2":76} 
{"index":{"_index":"test_index","_type":"doc","_id":5}} 
{"field1":2013,"field2":2} 
{"index":{"_index":"test_index","_type":"doc","_id":6}} 
{"field1":2013,"field2":55} 

POST /test_index/_search 
{ 
    "size": 0, 
    "aggs": { 
    "field1_group": { 
     "terms": { 
     "field": "field1", 
     "size": 0, 
     "order": { 
      "maksior": "asc" 
     } 
     }, 
     "aggs": { 
     "maksior": { 
      "max": { 
      "field": "field2" 
      } 
     } 
     } 
    } 
    } 
} 

,這將給你:

{ 
    "took": 1, 
    "timed_out": false, 
    "_shards": { 
     "total": 1, 
     "successful": 1, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 6, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "field1_group": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
      { 
       "key": 2015, 
       "doc_count": 2, 
       "maksior": { 
        "value": 20 
       } 
      }, 
      { 
       "key": 2014, 
       "doc_count": 1, 
       "maksior": { 
        "value": 39 
       } 
      }, 
      { 
       "key": 2013, 
       "doc_count": 3, 
       "maksior": { 
        "value": 76 
       } 
      } 
     ] 
     } 
    } 
} 

然後你可以遍歷結果並在客戶端進行總結。

+0

實際上,使用1.4你可以嘗試腳本化的度量聚合http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html –

+0

感謝gruby的迴應。我得到了類似的查詢,但每個field1的field2數量很大,所以不想總結應用程序端。我使用ES 1.4.2所以腳本聚合我可以嘗試,但鏈接不工作。 – asurana2

+0

@ asurana2與建議的查詢,你會得到儘可能多的結果,因爲field1有不同的值(不管有多少field2),所以我沒有在這裏看到問題。你能解釋一下嗎? –