获取每个存储区中前B个字段中B排序的前N个?

时间:2019-09-24 13:54:48

标签: elasticsearch

下面有一个索引

{
    "createtime" : 1562848788805,
    "post" : "director",
    "personId" : 30056764807,
    "comId" : 20034856551
}

并且personId和comId是唯一的,现在想像

一样获得每人最新的三个comId
select person_id,com_id from t where person_id = 1 order by createtime desc limit 3
union all
select person_id,com_id from t where person_id = 2 order by createtime desc limit 3
union all
select person_id,com_id from t where person_id = 3 order by createtime desc limit 3

现在通过下面的搜索查询来实现此要求

{
    "query": {
        "terms": { "personId": [1, 2, 3] }
    },
    "aggs": {
        "group_by_personId": {
            "terms": {
                "field": "personId",
                "size": 3
            },
            "aggs": {
                "group_by_comId": {
                    "terms": {
                        "field": "comId",
                        "size": 3,
                        "order": {
                            "max_createtime": "desc"
                        }
                    },
                    "aggs": {
                        "max_createtime": { "max": { "field": "createtime" } }
                    }
                }
            }
        }
    },
    "size": 0
}

但是有点麻烦。可以直接获取每个人的最新comId吗?是否可以直接按createtime排序(因为personId和comId是唯一的)?可以从搜索结果中忽略max_createtime和doc_count吗?

   "group_by_personId" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : 1,
          "doc_count" : 30,
          "group_by_comId" : {
            "doc_count_error_upper_bound" : -1,
            "sum_other_doc_count" : 27,
            "buckets" : [
              {
                "key" : 734,
                "doc_count" : 1,
                "max_createtime" : {
                  "value" : 1.569316485853E12
                }
              },
              {
                "key" : 674,
                "doc_count" : 1,
                "max_createtime" : {
                  "value" : 1.562921481772E12
                }
              },
              {
                "key" : 017,
                "doc_count" : 1,
                "max_createtime" : {
                  "value" : 1.562851602206E12
                }
              }
            ]
          }
        },

0 个答案:

没有答案