Агрегации Elasticsearch

Я пытаюсь создать детализацию категорий с помощью elasticsearch.

У меня проблема с отображением количества категорий.

Если я запущу этот запрос (красные, повседневные штаны), агрегаты категорий отобразят только количество повседневных вещей. Могу ли я получить количество других категорий в одном запросе (например, обувь, джинсы, платья)

Примеры фильтров:

Цвета:

-Красный цвет (выбран как логический термин запроса)

Категории:

Shoes
Pants
    -Jeans
    - Casual (selected as a bool query term)
Dresses

person blackrover    schedule 24.09.2014    source источник


Ответы (1)


Если я хорошо понимаю, вам, похоже, нужно рассчитать свои агрегации по всем категориям, а затем отфильтровать их, чтобы отображать только одну категорию за раз.

Этого можно добиться с помощью post_filter (см. документация). Это фильтр, который применяется после вычисления агрегации.

В вашем случае вместо такого запроса:

{
  "query": {
    "bool": {
      "must": [
        {"term": {"color": "red"} },
        {"term": {"category": "casual"}}
        ....
      ]
    }
  }, 
  "aggs": {
    ...
  }
}

Вы используете это:

{
  "query": {
    "bool": {
      "must": [
        {"term": {"color": "red"} }
        ...
      ]
    }
  }, 
  "aggs": {
    ...
  },
  "post_filter": {
    {"term": {"category": "casual"}}
  }
}

И фильтр term для category не будет учитываться при вычислении агрегатов.

person ThomasC    schedule 24.09.2014