2016-08-23 69 views
0

不同我有一個包含一個版本號文件:彈性搜索只選擇與最大字段值

{ 
    "original_id" : "1234", 
    "version" : 1 
} 


{ 
    "original_id" : "1234", 
    "version" : 2 
} 


{ 
    "original_id" : "4567", 
    "version" : 1 
} 

,我需要選擇只與不同的ID和最大版本號文件。

從這個最後的結果應該是:

[ 
    { 
     "original_id": 1234, 
     "version" : 2 
    }, 
    { 
     "original_id" : 4567, 
     "version" : 1 
    } 
] 

我完全被混淆的文件 - 我應該使用AGGS?我做到了,但我仍然得到了所有這些。我想只是頂配版本

在SQL:

選擇不同(original_id)作爲ID,MAX(版本)從文檔的標識分組的版本;

這裏是我當前的查詢:

{ 
    "from" : 0, 
    "size" : 25, 
    "sort": [{ 
     "version": { 
      "order": "desc", 
      "mode": "max" 
     } 
    }], 
    "query": { 
     "filtered": { 
      "query": { 
       "bool": { 
        "must": [ 
         { 
          "match": {"original_id": "95936d0b-0de4-44ad-81d3-b95d3200c27f"} 
         } 
        ] 
       } 
      }, 
      "filter": { 
       "range": { 
        "start" : { 
        } 
       } 
      } 
     } 
    } 
} 

回答

1

是你應該使用聚合。 。 。以下是查詢您的要求。 `

{ 
    "aggs": { 
    "agg1": { 
     "terms": { 
     "field": "original_id", 
     "size": 0 
     },"aggs": { 
     "agg2": { 
      "max": { 
      "field": "version" 
      } 
     } 
     } 
    } 
    } 

`