2016-04-29 28 views
1

に私はAlgoliaのドキュメントを見たとelasticsearchにあなたのような集計をすることができますことに関連する何かを見つけることができませんでした:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html統計集計algolia

私が何をしたいの例はこれです:

  • ユーザーが検索すると、特定のフィルタに一致するすべての数(赤いアイテム、青いアイテム、黄色のアイテムなど)の合計数など、そのクエリの集計結果もリアルタイムで表示されます

答えて

3

ESが「集約」と呼ぶのは、実際にはアルゴリアが提供する「ファセット」のサブセットです(https://www.algolia.com/doc/search/filtering-faceting#faceting参照)。 Algolia faceting機能は、termアグリゲーションを使用してESで達成できる機能です。

ファセットは、ファセット化された各値に関連付けられたカウントを計算し、それらの値をフィルタリングする方法を提供します。

Algoliaは最適化されており、あなたのタイプのフルテキスト検索用に設計されているため、エンジンは深い集約機能を提供しません。取得する唯一の集計は、基本ファセット値が数値の場合はmin,maxavgの値です。

+0

Ah shit。私は日付に基づく集計をしたい。基本的に、各ユーザは "利用可能な"スロットのリスト( '[開始日、終了日]'のペアのリスト)を持っており、特定のクエリ(例えば、午後、午後、夕方など)で利用可能なユーザの数を集計したい。 '{朝:100、午後:50、夕方:10}') – Zach

+0

カウントを持つことはAlgoliaのファセッティングで組み込まれています。再フォーマットする必要があるのは、スロットのスキーマのみです。 'slot:[" 08:00 "、" 12:00 "]'の代わりに 'slot:" morning "'に変換し、あなたの 'attributesForFaceting'に' slot'を追加すれば完了です。 – redox

+1

私はそれが好きですが、唯一の問題はタイムゾーンを越えて動作しないことです。私は、タイムゾーンごとに計算されたアベイラビリティを持つように、データを前処理するという回避策があると思います。たとえば、各ユーザには、次のようなネストされたオブジェクトがあります。 '{morning:[-1、-2]、午後:[8,9]、...}'数値はタイムゾーンです。次に、現在のユーザーのタイムゾーン(検索しているユーザー)を集計して集計します。 – Zach