概要
filter 句は、クエリ条件に基づいてユーザーが関心を持つドキュメントを検索するために使用されます。 filter 句を使用して、query 句を使用してクエリされたドキュメントをフィルタリングし、必要なドキュメントを取得できます。
構文
フィルター条件の形式: field=value
フィルター条件は、>、<、=、<=、>=、!=、in、notin などの通常の条件演算子と、+、-、*、/、&、^、| などの算術演算子をサポートしています。
複数のフィルター条件を指定し、論理演算子 AND、OR、および () を使用してそれらを接続できます。 論理演算子は大文字にする必要があります。
制限事項
filter 句はオプションです。
filter 句のパラメーターで参照するフィールドは、アプリケーションスキーマを定義するときに属性フィールドとして構成する必要があります。
精度の問題により、FLOAT 型と DOUBLE 型のフィールドの完全一致を確認することはできません。このような場合は、> と < を使用してください。
filter 句の LITERAL 型のフィールドのフィールド値は、二重引用符 (") で囲む必要があります。そうしないと、エラーコード 6135 と次のエラーメッセージが返されます: 定数式の値の型が無効です。LITERAL 型のフィールドは関係演算をサポートしますが、算術演算はサポートしません。
ソートのために、filter 句で距離関数などの機能関数を使用できます。
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 キロメートル以内の KFC を検索します。この例では、ユーザーの座標の経度と緯度は 120.34256 と 30.56982 です。KFC の経度と緯度を示す lon フィールドと lat フィールドは、属性フィールドとして構成する必要があります。
query=default:'KFC'&&sort=+distance(lon,lat,"120.34256","30.56982")
in_polygon: 点が特定のポリゴン地理領域内にあるかどうかを確認します。一般に、この関数は、ユーザーが加盟店の配達半径内にあるかどうかを判断するために使用されます。
例:
ユーザーが加盟店の配達半径内にあるかどうかを確認します。たとえば、coordinates フィールドは加盟店の配達半径を示し、ユーザーの座標は (120.307234, 39.294245) です。次に、次のクエリ句を使用して、配達半径にユーザーが含まれる加盟店を検索できます。
query=default:'Foods'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0
in_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\,yG
bit_struct: INT_ARRAY 型のフィールドの各値を複数の部分に分割し、その部分に対して特定の操作を実行します。
例:
特定の期間に営業している店舗を検索します。ドキュメントには、INT64_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")!=-1
fieldlen: LITERAL 型のフィールドの長さを計算します。
例:
usr_name フィールドの値が空でないドキュメントを検索します。
query=default:'Keyword'&&filter=fieldlen(usr_name)>0
in または 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