Статистические агрегаты в algolia

Я просматривал документацию по Algolia и не смог найти ничего, связанного с агрегацией, как вы можете в elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html.

Вот пример того, что я хочу сделать:

  • Когда пользователь выполняет поиск, я также показываю в режиме реального времени результаты агрегирования по этому запросу, такие как количество всего, что соответствует определенному фильтру (например, количество всех красных элементов, синих элементов, желтых элементов и т. Д.)

person Zach    schedule 29.04.2016    source источник


Ответы (1)


То, что ES называет «агрегатами», на самом деле является подмножеством «аспектов», которые предоставляет Algolia (см. https://www.algolia.com/doc/search/filtering-faceting#faceting). Возможности фасетирования Algolia - это то, чего вы можете достичь в ES с помощью агрегирования term.

Фасетирование вычислит счетчики, связанные с каждым фасетным значением, и предоставит вам способ фильтрации по этим значениям.

Поскольку Algolia была оптимизирована и разработана для полнотекстового поиска по мере ввода, этот движок не обеспечивает возможности глубокой агрегации. Единственное агрегирование, которое вы получите, - это значения min, max, avg, если базовые значения фасета являются числами.

person redox    schedule 29.04.2016
comment
Вот дерьмо. Я хочу делать агрегаты на основе даты. По сути, у каждого пользователя есть список слотов доступности (список пар [start_date, end_date]), и я хочу агрегировать количество пользователей, которые доступны утром, днем, вечером и т. Д. Для определенного запроса (например, { morning: 100, afternoon: 50, evening: 10 }) - person Zach; 29.04.2016
comment
Счетчики встроены в огранку Algolia; единственное, что вам нужно будет переформатировать, - это схему ваших слотов. Вместо slot: ["08:00", "12:00"] вы можете преобразовать это в slot: "morning" и просто добавить slot в свой attributesForFaceting, и все готово. - person redox; 29.04.2016
comment
Мне это нравится, но единственная проблема в том, что он не работает в разных часовых поясах. Я предполагаю, что обходным путем может быть предварительная обработка данных, чтобы у меня была рассчитана доступность для каждого часового пояса. Например, у каждого пользователя есть вложенный объект, подобный следующему: { morning: [-1, -2], afternoon: [8, 9], ... } где числа - часовые пояса. Затем я просто беру часовой пояс текущего пользователя (пользователя, который выполняет поиск) и выполняю агрегирование. - person Zach; 29.04.2016