Получить Top N поданных A сортировать по некоторым поданным B внутри каждой корзины? - PullRequest
0 голосов
/ 24 сентября 2019

Существует индекс, подобный приведенному ниже

{
    "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
}

, но найти немного громоздким.Могли ли вы напрямую получить последние комментарии от каждого человека?Можно ли напрямую отсортировать по времени создания (потому что 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
                }
              }
            ]
          }
        },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...