2016-01-08 13 views
6

Algoliaで配列の少なくとも1つの要素がいくつかの条件を満たすレコードを検索する方法を探しています。Algolia AND arrayを使って検索する

prices.price<60 AND prices.start<=20160210 AND prices.end>=20160210

(価格はより少ない製品:私は次のようなクエリを実行する方法を探しています

{ 
    "name": "Shoes", 
    "price": 100, 
    "prices": [ 
    { 
     "start": 20160101, 
     "end": 20160131, 
     "price": 50, 
    }, 
    { 
     "start": 20160201, 
     "end": 20160229, 
     "price": 80, 
    } 
    ] 
} 

: 例として、レコードのこの種を想像60日)

その日の価格条件が満たされていないのにレコードが返されるため、このクエリは何も返されません。おそらく、条件がすべての価格の間で「グローバルに」満たされているためです。

私はアルゴリアの初心者で、勉強しようとしています。希望のリクエストを行う方法があるのですか、または別の価格のインデックスを取得してmultiple queriesを使用する必要がありますか?

ありがとうございました。

答えて

7

facetFilterまたはtagFilterを配列に適用すると、Algoliaのエンジンは配列の要素が一致するかどうかを確認し、次の条件に進みます。

それがそのように動作し、あなたが期待できない方法は簡単です理由:あなたは(タグのような)文字列の配列を持っていると仮定してみましょう:

{ tags: ['public', 'cheap', 'funny', 'useless'] } 

をユーザが「あるレコードを検索したい場合このユーザーは、同時に「役に立たない」と「面白い」の両方であるが、アレイ内の両方のタグを含むレコードについては、「役に立たない」と「面白い」両方のタグを探しているわけではありません。

解決策は、オブジェクトの配列を持つレコードを、それぞれ1つのオブジェクトを持つ複数のレコードに変換するという方法でオブジェクトを非正規化することです。

だから、あなたはあなたが同じインデックス(および非重複するdistinctを使用)でこれを行う、または1ヶ月あたりのインデックスや一日を持っている可能性のいずれか

[ 
    { 
    "name": "Shoes", 
    "default_price": 100, 
    "price": { "start": 20160101, "end": 20160131, "price": 50 } 
    }, 
    { 
    "name": "Shoes", 
    "default_price": 100, 
    "price": { "start": 20160201, "end": 20160229, "price": 80 } 
    } 
] 

{ 
    "name": "Shoes", 
    "price": 100, 
    "prices": [ 
     { "start": 20160101, "end": 20160131, "price": 50 }, 
     { "start": 20160201, "end": 20160229, "price": 80 } 
    ] 
} 

を変換するでしょう。それは本当にあなたのユースケースに依存します。これはあなたに適切な解決策を与えることを少し難しくします。

関連する問題