Получение агрегированных результатов с выбранным аспектом - PullRequest
0 голосов
/ 18 января 2019

Не уверен, что это возможно, но я сталкиваюсь с текущей проблемой:

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

Например: на странице "женская обувь" я запускаю запрос с фильтром "пол = женщины" и категорией "обувь", который дает мне все желаемые результаты.Также есть агрегат по «бренду», который возвращает мне все бренды.Тем не менее, это также содержит бренды с количеством 0, так как они не соответствуют критериям «женская обувь».Но поскольку фасет не выбран, я могу просто скрыть их, чтобы пользователь их не видел.

Пока все хорошо.

Теперь, когда я запускаю запрос для "дам«обувь от Nike» (бренд = nike как фильтр), я получаю тот же список агрегатов, но теперь все бренды имеют счет 0, кроме Nike.Теперь их трудно просто спрятать, поскольку мы хотим предложить возможность фильтрации по нескольким (доступным) брендам.

Какой должен быть наилучший подход к этому с как можно меньшим количеством запросов?

1 Ответ

0 голосов
/ 19 января 2019

Когда вы говорите о множественном выборе фасетирования, как в вашем примере - в Elasticsearch есть очень удобная функция - post_filter

Post_filter применяется к поискуХиты в самом конце поискового запроса, после того, как агрегирование уже рассчитано.

Все, что вам нужно сделать, это переместить свой фильтр бренда Nike на post_filter запроса, например, так:

{
  "query": {
      ...
  },
  "aggs": {
      ...
  },
  "post_filter": { 
    "term": { "brand": "Nike" }
  }
}

, который позволит вам рассчитать агрегирование по всем брендам и только после отфильтрует выбранную марку.

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