フィルタ句を使用すると、ビジネス要件に基づいてフィルタ条件を指定してドキュメントを検索できます。フィルタ句を使用すると、クエリ句を使用してクエリされたドキュメントをフィルタリングし、必要なドキュメントを取得できます。
構文
フィルタ条件の形式: field=value.
フィルタ条件では、>、<、=、<=、>=、!=、in、notin などの一般的な条件演算子、および +、-、*、/、&、^、| などの算術演算子がサポートされています。
複数のフィルタ条件を指定し、論理演算子 AND、OR、および () を使用してそれらを接続できます。論理演算子は大文字にする必要があります。
使用上の注意
フィルタ句はオプションです。
フィルタ句のパラメータで指定するフィールドは、アプリケーションスキーマを定義するときに属性フィールドとして構成する必要があります。
精度の問題により、FLOAT 型または DOUBLE 型の値が別の値と等しいかどうかを確認できません。フィルタ句で FLOAT 型または DOUBLE 型のフィールドが必要な場合は、より大きい演算子 (>) とより小さい演算子 (<) を含む式を使用して関係を定義できます。
LITERAL 型の値は、フィルタ句で二重引用符 ('') で囲む必要があります。LITERAL 型のフィールドは関係演算をサポートしますが、算術演算はサポートしません。フィルタ句で LITERAL 型の値を二重引用符 ('') で囲まないと、エラーコード 6135 と次のエラーメッセージが返されます: 定数式の値の型が無効です。
ソートのために、フィルタ句で距離関数などの機能関数を使用できます。
LITERAL 型のフィールドを含む式では、等号演算子 (=) または不等号演算子 (!=) を使用でき、より大きい演算子 (>) またはより小さい演算子 (<) は使用できません。LITERAL 型のフィールドはセグメント化されていません。したがって、完全一致が必要です。
in 関数または notin 関数を使用して、フィールド値が特定のリストにあるかどうかを確認できます。INT、LITERAL、FLOAT、および DOUBLE 型のフィールドのみがサポートされています。ARRAY 型と TEXT 型のフィールド、およびあいまい検索のアナライザはサポートされていません。詳細については、「in および notin」をご参照ください。
TEXT や SHORT_TEXT などのテキスト型のフィールドを使用して属性フィールドを作成することはできません。INT、INT_ARRAY、FLOAT、FLOAT_ARRAY、DOUBLE、DOUBLE_ARRAY、LITERAL、LITERAL_ARRAY などの数値型または非テキスト型のフィールドのみを使用して属性フィールドを作成できます。
サポートされている機能関数
distance: 2 点間の球面距離を返します。ほとんどの場合、この関数は位置情報サービス (LBS) の距離計算で使用されます。
例:
ユーザーの座標から 10 km 以内の KFC を検索します。この例では、ユーザーの座標の経度と緯度は 120.34256 と 30.56982 です。KFC の経度と緯度を示す lon フィールドと lat フィールドは、属性フィールドとして構成する必要があります。
query=default:'KFC'&&filter=distance(lon,lat,"120.34256","30.56982")<10in_polygon: ポイントが特定のポリゴン地理領域内にあるかどうかを確認します。一般に、この関数は、ユーザーが加盟店の配送半径内にあるかどうかを判断するために使用されます。
例:
ユーザーが加盟店の配送半径内にあるかどうかを確認します。たとえば、coordinates フィールドは加盟店の配送半径を指定し、ユーザーの座標は (120.307234, 39.294245) です。次に、次のクエリ句を使用して、配送半径をサポートする加盟店を検索できます。
query=default:'Foods'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0in_query_polygon: ドキュメントで指定されたポイントが特定のポリゴン地理領域内にあるかどうかを確認します。
例:
Yintai ビジネス地区 (xA,yA,xB,Yb,xC,Yc;xD,yD,xE,yE,xF,yF,xG,yG) 内の KFC を検索します。point フィールドは、KFC の地理的な場所を格納するために使用されます。
query=default:'KFC'&&filter=in_query_polygon("polygons",point)>0&&kvpairs=polygons:xA\,yA\,xB\,Yb\,xC\,Yc;xD\,yD\,xE\,yE\,xF\,yF\,xG\,yGbit_struct: INT_ARRAY 型のフィールドの各値を複数の部分に分割し、その部分に対して特定の操作を実行します。
例:
特定の期間に営業している店舗を検索します。ドキュメントには、INT_ARRAY 型の open_time フィールドがあります。配列内の各 64 ビット整数は、店舗の営業時間数を指定します。整数の最初の 32 ビットは、店舗の開店時間を指定します。整数の最後の 32 ビットは、店舗の閉店時間を指定します。14:00 から 15:30 まで営業している店舗を検索する場合は、まず開始時刻と終了時刻のそれぞれを、同じ日の 00:00 から経過した分数に変換する必要があります。この例では、14:00 は 840 に、15:30 は 930 に変換されます。
filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1fieldlen: LITERAL 型のフィールドの値の長さを計算します。
例:
usr_name フィールドの値が空でないドキュメントを検索します。
query=default:'Keyword'&&filter=fieldlen(usr_name)>0in または notin: フィールド値が特定のリストにあるかどうかを確認します。
例:
"iPhone" を含み、値が 1、2、または 3 の type フィールドを持つドキュメントを取得します。type フィールドは INT 型です。
query=default:'iphone'&&filter=in(type, "1|2|3")"iPhone" を含み、値が 1、2、または 3 でない type フィールドを持つドキュメントを取得します。type フィールドは INT32 型です。
query=default:'iphone'&&filter=notin(type, "1|2|3")multi_attr: 特定の位置にある特定の配列フィールドの値を返します。
例:
商品には、市場価格、割引価格、販売価格など、複数の価格があります。価格は prices フィールドに記録されます。次のクエリ句を使用して、販売価格が 1,000 未満の携帯電話を検索できます。
query=default:'Mobile phone'&&filter=multi_attr(price,2)<1000例
アプリケーションの INT32 型の category フィールドには、1 (ニュース) や 2 (bbs) などの値があります。"浙江大学" を含み、category フィールドが 2 に設定されているドキュメントを検索するには、次のクエリ句のいずれかを使用できます。
query=default:'浙江大学' AND category_search:'2' // インデックスフィールド category_search は category フィールドに対して作成されます。 // または query=default:'浙江大学'&&filter=category=2小説を検索するために使用されるアプリケーションでは、STRING_ARRAY 型の tags フィールドは、小説のスタイルに基づいて、宮廷、サスペンスとホラー、ロマンスなどのタグを指定します。"Empresses in the palace" を含み、tags フィールドの値が "palace" であるドキュメントを検索するには、次のクエリ句を使用できます。
query=default:'Empresses in the palace'&&filter=tags="palace"e コマースアプリケーションには、INT32 型の hit フィールドと sale フィールド、および INT64 型の create_time フィールドが存在します。次のクエリ句を使用して、次の条件を満たすドキュメントを検索できます。1. ドキュメントに "dress" が含まれている。2. rate フィールドの値と hit フィールドと sale フィールドの値の合計の積が 10000 を超えている。3. create_time フィールドの値が 1402345600 未満である。
query=default:'dress'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600