フィルター句は、クエリ句に加えてフィールド条件を適用することで検索結果を絞り込みます。属性フィールドに対してのみ機能します。
構文
filter=<field><operator><value>論理演算子を使用して複数の条件を組み合わせることができます:
filter=category=2 AND (hit+sale)*rate>10000演算子
| 種類 | サポートされる演算子 |
|---|---|
| 関係 | >、 <、 =、 <=、 >=、 != |
| 算術 | +、 -、 *、 /、 &、 ^、 | |
| 論理 | AND、 OR、 () — 大文字にする必要があります |
| リストメンバーシップ | in(field, "v1|v2|v3")、 notin(field, "v1|v2|v3") |
フィールドタイプ別の制約
| フィールドタイプ | サポートされる演算子 | 注意 |
|---|---|---|
| INT、INT32、INT64 | すべての関係演算子と算術演算子 | リストメンバーシップのチェックには in/notin を使用します (INT と INT32 のみ。サポートされるタイプについては、in と notin をご参照ください) |
| FLOAT、DOUBLE | >、 <、 <=、 >=、 != | = の使用は避けてください — 浮動小数点精度のため、完全な等価性比較は信頼できません |
| LITERAL | =、 != のみ | LITERAL フィールドはトークン化されないため、完全一致のみがサポートされます。値はダブルクォーテーションで囲む必要があります (例:tags="palace")。引用符を省略すると、エラー 6135「定数式の値タイプが無効です」が返されます |
| INT_ARRAY、FLOAT_ARRAY、DOUBLE_ARRAY、LITERAL_ARRAY | 関係演算子と算術演算子 | INT_ARRAY 要素のビットレベルの操作には bit_struct を使用します |
| TEXT、SHORT_TEXT | サポートされていません | これらのタイプは属性フィールドとして設定できず、フィルター句では使用できません |
| ARRAY (汎用) | in/notin | あいまい検索にアナライザを使用するフィールドも in/notin |
注意:
フィルター句はオプションです。
フィルター句で参照されるすべてのフィールドは、アプリケーションスキーマで属性フィールドとして設定する必要があります。TEXT および SHORT_TEXT タイプのフィールドは属性フィールドとして設定できません。
distanceなどの関数は、ソートのためにフィルター句で使用できます。
組み込み関数
以下の関数は、単純なフィールド比較を超えたフィルタリングを拡張します。
distance — 地理的近接性によるフィルター
保存された場所とクエリポイントとの球面距離を返します。地理的半径内に結果を制限する必要がある位置情報サービス (LBS) のシナリオで使用します。
lon および lat フィールドは属性フィールドとして設定する必要があります。
例:経度 120.34256、緯度 30.56982 のユーザーから 10 km 以内にある KFC の場所を検索します。
query=default:'KFC'&&sort=+distance(lon,lat,"120.34256","30.56982")in_polygon — 配送エリアまたはサービス境界によるフィルター
クエリで指定された固定点が、ドキュメントフィールドに保存されたポリゴン内に収まるかどうかをチェックします。各ドキュメントが地理的エリア (店舗の配送半径など) を定義し、特定のユーザーの場所を含むエリアを検索する場合に使用します。
例:座標 (120.307234, 39.294245) のユーザーをカバーする配送エリアを持つ店舗を検索します。ここで、coordinates は各店舗の配送ポリゴンを保存します。
query=default:'Foods'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0in_query_polygon — クエリで定義されたエリアによるフィルター
ドキュメントに保存されたポイントが、クエリで定義したポリゴン内に収まるかどうかをチェックします。ビジネス地区などのカスタムの地理的境界内で検索する場合に使用します。
ポリゴンの頂点は kvpairs を介して渡されます。point フィールドには、各ドキュメントの地理的な場所が保存されます。
例:Yintai ビジネス地区内にある 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 フィールドの各 64 ビット整数を名前付きのビット範囲に分割し、それらに対して条件を評価します。単一のフィールドがビットセグメントにパックされた複数の属性 (開店時間と閉店時間など) をエンコードする場合に使用します。
例:14:00 (840 分) から 15:30 (930 分) の間に営業している店舗を検索します。open_time フィールドは INT64_ARRAY タイプです。各整数は、ビット 0〜31 に開店時間、ビット 32〜63 に閉店時間を保存します。
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 — 値のリストによるフィルター
フィールドの値がパイプ区切りのリストに含まれているか (または含まれていないか) をチェックします。サポートされるタイプ:INT、LITERAL、FLOAT、DOUBLE。ARRAY、TEXT、またはアナライザを使用するフィールドではサポートされていません。
詳細については、「in と notin」をご参照ください。
例:INT 型の type フィールドが 1、2、または 3 である "iphone" を含むドキュメントを返します。
query=default:'iphone'&&filter=in(type, "1|2|3")例:INT32 型の type フィールドが 1、2、または 3 であるドキュメントを除外します。
query=default:'iphone'&&filter=notin(type, "1|2|3")multi_attr — 配列フィールドの特定要素によるフィルター
配列フィールドの指定された位置の値を返します。フィールドが異なる属性 (市場価格、割引価格、販売価格など) の複数の値を保存しており、特定の位置でフィルタリングする場合に使用します。
例:販売価格 (price フィールドの 2 番目の位置) が 1,000 未満の携帯電話を検索します。
query=default:'Mobile phone'&&filter=multi_attr(price,2)<1000例
INT フィールドによるフィルター
category フィールド (INT32) は、ニュースに 1、BBS に 2 を使用します。「Zhejiang University」に関するドキュメントを BBS カテゴリで検索するには、次のいずれかを使用します:
query=default:'Zhejiang University' AND category_search:'2'query=default:'Zhejiang University'&&filter=category=2LITERAL 配列フィールドによるフィルター
小説検索アプリケーションでは、tags フィールド (STRING_ARRAY) に「palace」、「suspense and horror」、「romance」などのジャンルタグが保存されます。「Empresses in the Palace」の宮殿ジャンルの結果を検索するには:
query=default:'Empresses in the Palace'&&filter=tags="palace"算術演算子と関係演算子の組み合わせ
e コマースアプリケーションで、複合エンゲージメントスコア (hit + sale) * rate が 10,000 を超え、かつリストがタイムスタンプ 1402345600 より前に作成されたドレス商品を検索します:
query=default:'dress'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600