弹性搜索仅选择与最大字段值不同的

时间:2016-08-23 17:02:40

标签: elasticsearch

我的文档包含版本号:

{
  "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中的

  

选择distinct(original_id)作为id,max(version)作为docs按文档分组的版本;

这是我当前的查询:

{
    "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 个答案:

答案 0 :(得分:1)

是的,你应该使用聚合。 。 .following是对您的要求的查询。 `

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

`