2016-03-24 14 views
3

で導出面でフィルタする方法:は、以下の指標を考えるalgolia

{ 
    id: 1, 
    distance: [4, 10] 
}, 
{ 
    id: 2, 
    distance: [1, 2] 
}, 
{ 
    id: 3, 
    distance: [9, 10] 
} 

それに数値フィルタを適用することができるようにdistanceにファセットを有効にした後、私は、派生属性に追加フィルタリングを適用したいというI distance_rangeに電話してください。これは、例えば、既存の属性にカスタムロジックを通じて、その値を導出:範囲「0-5」、「5-10」に各距離番号を変えるでしょう

// In JS: 
distance_range: Math.floor((distance - 0.5)/5) * 5 + "-" + Math.ceil((distance)/5) * 5 

など

{ 
    id: 1, 
    distance: [4, 10], 
    distance_range: ["0-5", "5-10"] 
}, 
{ 
    id: 2, 
    distance: [1, 2] 
    distance_range: ["0-5"] 
}, 
{ 
    id: 3, 
    distance: [9, 10] 
    distance_range: ["5-10"] 
} 

このようなインデックスに到達する最良の方法は何ですか?データを事前に処理しているのですか、あるいはアルゴリアにその属性を即座に変換する機能がありますか?

答えて

3

Algoliaはカスタムデータ構造を使用してデータをインデックス化し、結果をできるだけ早く提供します。
インデックスをリアルタイムで再構築するのは時間がかかりすぎて答えが得られません。そのため、並べ替えの場合でもAlgolia requires you to duplicate your data into multiple indicesです。

表示するために新しい属性を計算するだけであれば、フロントエンドロジックでは確かに達成可能で、autocomplete.jsinstantsearch.jsの両方に表示する前にデータを変換する方法があります。

しかし、フィルタリングしたいので、Algoliaはこの情報をデータ構造内に必要とします。したがって、この計算をあらかじめ行う必要があります。
また、この新しい属性をattributesForFacetingに追加することを忘れないでください。

関連する問題