Elasticsearch пользовательский результат агрегации

В моем разработанном учебном модуле есть страница, где перечислены все курсы в виде таблицы с фильтруемым заголовком. Один из столбцов - это "Сохраненный" столбец, который будет "Сохранен", если я добавлю его в закладки, и "Несохраненный", если нет.

Сущность курса индексируется следующим образом:

{
  "_index": "myindex",
  "_type": "course",
  "_id": "248fc0a2-06e1-11e6-b740-000c298fdb4d",
  "_score": 1,
  "_source": {
  "boost_number": 1,
  "entity_type_number": 64,
  "course_status_string": "Closed",
  "title": "My Test Course",
  "body": "This is just a test course",
  "created_date": "20160420T101753Z",
  "categories_uuid": [ ],
  "segment_string": [
    "Other"
  ],
  "vertical_string": [
    "Other"
  ],
  "saved_users_uuid": [
    "251bde26-4adf-11e4-b705-000c298fdb4d",
    "00026884-7cc8-11e3-a570-fa163e2bcb7a",
    "00061164-9283-11e5-a394-000c298fdb4d",
    "00110a72-0b8b-11e4-9a64-fa163e2bcb7a",
  ]
}

Допустим, я вошел в систему с идентификатором: "251bde26-4adf-11e4-b705-000c298fdb4d". При запросе упругих граней я получил это ведро:

"saved_users" : {
    "doc_count_error_upper_bound": 0, 
    "sum_other_doc_count": 0, 
    "buckets" : [ 
        {
            "key" : "251bde26-4adf-11e4-b705-000c298fdb4d",
            "doc_count" : 5
        },
        {
            "key" : "00026884-7cc8-11e3-a570-fa163e2bcb7a",
            "doc_count" : 0
        },
        ...
    ]
}

Тем не менее, я хотел бы иметь другое пользовательское ведро, такое как:

{
  ...
  "buckets": [
    {
      "key": "Saved",
      "doc_count": ...
    },
    {
      "key": "Unsaved",
      "doc_count": ...
    },
  ]
}

Это возможно? Как я мог это сделать?

1 ответ

Решение

Вы можете попробовать добавить следующее filters агрегация:

{
  "size": 0,
  "aggs": {
    "category": {
      "filters": {
        "filters": {
          "Saved": {
            "exists": {
              "field": "saved_users_uuid"
            }
          },
          "Unsaved": {
            "missing": {
              "field": "saved_users_uuid"
            }
          }
        }
      }
    }
  }
}
Другие вопросы по тегам