2015-11-04 82 views
0

假設我在ES中有以下文檔,每個文檔都有3個字段:f1,f2和score。 我想找到的所有文件,按F1,F2和秩序由組最高分,在SQL我可以簡單地這樣做:ElasticSearch 2階段聚合後的訂單

select f1,f2,score from table group by f1,f2 order by max(score)

什麼是elasticsearch等價?嵌套術語聚合不會給出正確的順序,因爲返回的f2術語桶全部嵌套在f1術語的同一個桶中。

+0

這涉及到多個字段聚合,這是[這裏提到](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_multi_field_terms_aggregation )目前的ES不支持。 不過,我不確定是否有其他方法。 – boh

+0

這裏的得分是多少? –

+0

它只是文檔的另一個字段。 – boh

回答

2

下聚集的工作應該基於字段1和字段2

{ 
    "aggs": { 
    "fileCombo": { 
     "terms": { 
     "script": "doc['field1'].value + doc['field2'].value", 
     "order": { 
      "maxScore": "desc" 
     } 
     }, 
     "aggs": { 
     "maxScore": { 
      "max": { 
      "field": "score" 
      } 
     } 
     } 
    } 
    } 
} 

第一聚集。 下一個按最大字段順序。

+0

謝謝@Vineeth,但我更喜歡不使用腳本的方法。 – boh

+0

然後去場上1和場2的2級聚合 –

+0

我不能在2級聚合後排序,這就是問題所在。 – boh