すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:filter 句

最終更新日:Dec 28, 2024

概要

filter 句を使用すると、ビジネス要件に基づいてフィルター条件を指定し、ドキュメントを検索できます。 filter 句を使用して、query 句を使用してクエリされたドキュメントをフィルタリングし、必要なドキュメントを取得できます。

構文

フィルター条件の形式: field=value.

  • フィルター条件では、>、<、=、<=、>=、!=、in、notin などの一般的な条件演算子、および +、-、*、/、&、^、| などの算術演算子がサポートされています。

  • 複数のフィルター条件を指定し、論理演算子 AND、OR、および () を使用してそれらを接続できます。 論理演算子は大文字にする必要があります。

使用上の注意

  1. filter 句はオプションです。

  2. filter 句のパラメーターで指定するフィールドは、アプリケーションスキーマを定義するときに属性フィールドとして構成する必要があります。

  3. 精度の問題により、FLOAT 型または DOUBLE 型の値が別の値と等しいかどうかをシステムで確認できません。 filter 句で FLOAT 型または DOUBLE 型のフィールドが必要な場合は、より大きい演算子 (>) とより小さい演算子 (<) を含む式を使用して関係を定義できます。

  4. filter 句では、LITERAL 型の値を二重引用符 ('') で囲む必要があります。 LITERAL 型のフィールドは関係演算をサポートしますが、算術演算はサポートしません。 filter 句で LITERAL 型の値を二重引用符 ('') で囲まないと、エラーコード 6135 と次のエラーメッセージが返されます: 定数式の値の型が無効です。

  5. ソートのために、filter 句で距離関数などの機能関数を使用できます。

  6. LITERAL 型のフィールドを含む式では、等号演算子 (=) または不等号演算子 (!=) を使用でき、より大きい演算子 (>) またはより小さい演算子 (<) は使用できません。 LITERAL 型のフィールドはセグメント化されていません。 したがって、完全一致が必要です。

  7. in 関数または notin 関数を使用して、フィールド値が特定のリストに含まれているかどうかを確認できます。 INT、LITERAL、FLOAT、および DOUBLE 型のフィールドのみがサポートされています。 ARRAY 型と TEXT 型のフィールド、およびあいまい検索のアナライザーはサポートされていません。 詳細については、in および notin を参照してください。

  8. 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'&&filter=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: ドキュメントで指定されたポイントが特定のポリゴン地理領域内にあるかどうかを確認します。

:

銀泰商業地区 (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 型のフィールドの各値を複数の部分に分割し、その部分に対して特定の操作を実行します。

:

特定の期間に営業している店舗を検索します。 ドキュメントには、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")!=-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

  1. アプリケーションの INT32 型の category フィールドには、1 (ニュース) や 2 (bbs) などの値があります。 次のクエリ句のいずれかを使用して、「浙江大学」を含み、category フィールドが 2 に設定されているドキュメントを検索できます。

     query=default:'浙江大学' AND category_search:'2'   // インデックスフィールド category_search は category フィールドに対して作成されます。
      // または
     query=default:'浙江大学'&&filter=category=2
  2. 小説を検索するために使用されるアプリケーションでは、STRING_ARRAY 型の tags フィールドは、小説のスタイルに基づいて、宮廷、サスペンスとホラー、ロマンスなどのタグを指定します。 次のクエリ句を使用して、「Empresses in the palace」を含み、tags フィールドの値が「palace」であるドキュメントを検索できます。

    query=default:'Empresses in the palace'&&filter=tags="palace"
  3. 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