Эластичная поисковая агрегация на каждую единицу python - PullRequest
1 голос
/ 20 апреля 2020

Я хочу для каждой единицы (org_name_en) добавить новое поле с агрегацией для review_count - sum / count. Поле members имеет тип nested. Ниже вы можете увидеть кусок ES db:

"hits" : [
      {
        "_index" : "some_index",
        "_type" : "_doc",
        "_id" : "some_id",
        "_score" : 1.0,
        "_source" : {
          "target_date" : "some_data",
          "org_name" : "abc",
          "org_name_en" : "ABC",
           [...]
          "members" : [
            {
              [...]
              "review_count" : 50.0,
            },
            {
              [...]
              "review_count" : 60.0,
            },

Конечный результат должен быть таким:

"hits" : [
      {
        [...]
        "_source" : {
          "target_date" : "filtered with some data",
          "org_name" : "abc",
          "org_name_en" : "ABC",
           [...]
          "members" : [
            {
              [...]
              "review_count" : 50.0,
            },
            {
              [...]
              "review_count" : 60.0,
            },
          ],
          "review_total": {
                "review_sum": 110,
                "review_count: 2
           },
         [...next unit DEF, GHI, XYZ with the same aggregation...]

Моя попытка с Elasticsearch-DSL в python - работает только для данного модуля, поэтому мне нужно сначала отфильтровать его

qs.aggs.bucket('members', 'nested', path='members').metric('review_total', 'sum', field='members.review_count')
...