Возможно ли при агрегировании объединить все значения свойства массива из всех сгруппированных документов в объединенный документ? - PullRequest
0 голосов
/ 23 октября 2019

У меня есть документы в формате, аналогичном следующему:

[
{
  "name": "fred",
  "title": "engineer",
  "division_id": 20
  "skills": [
     "walking",
     "talking"
  ]
},
{
  "name": "ed",
  "title": "ticket-taker",
  "division_id": 20
  "skills": [
     "smiling"
  ]
}
]

Я хотел бы выполнить запрос aggs, который бы показал полный набор навыков для подразделения: т.е.

{

   "aggs":{
      "distinct_skills":{
         "cardinality":{
            "field":"division_id"
         }
      }
   },
    "_source":{
      "includes":[
         "division_id",
         "skills"
      ]
   }
}

.. чтобы итоговое попадание выглядело следующим образом:

{
  "division_id": 20,
  "skills": [
     "walking",
     "talking",
     "smiling"
  ]
}

Я знаю, что могу извлечь inner_hits и перебрать список и объединить значения «вручную». Я предполагаю, что это будет работать лучше, если бы я мог сделать это запрос.

1 Ответ

0 голосов
/ 23 октября 2019

Всего два канала Термины агрегации запросов, как показано ниже:

POST <your_index_name>/_search
{
  "size": 0,
  "aggs": {
    "my_division_ids": {
      "terms": {
        "field": "division_id",
        "size": 10
      },
      "aggs": {
        "my_skills": {
          "terms": {
            "field": "skills",          <---- If it is not keyword field use `skills.keyword` field if using dynamic mapping. 
            "size": 10
          }
        }
      }
    }
  }
}

Ниже приведен пример ответа:

Ответ:

{
  "took" : 490,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "my_division_ids" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : 20,                            <---- division_id
          "doc_count" : 2,
          "my_skills" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [                        <---- Skills
              {
                "key" : "smiling",
                "doc_count" : 1
              },
              {
                "key" : "talking",
                "doc_count" : 1
              },
              {
                "key" : "walking",
                "doc_count" : 1
              }
            ]
          }
        }
      ]
    }
  }
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...