ドキュメントを絞り込むためのフィルター条件を指定できます。フィルター式はオプションです。
構文: filter:"expression"
。Expression=左オペランド 関係演算子 右オペランド
。
左オペランド: 属性フィールドまたは定数。定数は数値または文字列です。
関係演算子: 関係演算子。サポートされている演算子は次のとおりです: > < = <= >= !=
右オペランド: 属性フィールドまたは定数。定数は数値または文字列です。
例:
filter:"price > 100": この式を使用して、price フィールドの値が 100 より大きいドキュメントをクエリできます。
filter:"ids=1": ids フィールドは複数値フィールドです。この式を使用して、ids フィールドの値に 1 が含まれるドキュメントをクエリできます。
filter:"province!=\"Zhejiang\"": この式を使用して、province フィールドの値が Zhejiang でないドキュメントをクエリできます。
例
複数の条件を指定する
構文: filter:"条件 論理演算子 条件"
条件: price > 100 などの完全な関係式。
論理演算子: AND 演算子または OR 演算子。AND 演算子を使用すると、両方の条件に一致するドキュメントが返されます。OR 演算子を使用すると、いずれかの条件に一致するドキュメントが返されます。最も優先度の高い条件を括弧 ()
で囲むこともできます。
例:
filter:"price > 100 AND categoryId=10": この式を使用して、categoryId フィールドの値が 10 で、price フィールドの値が 100 より大きいドキュメントをクエリできます。
filter:"categoryId=100 OR categoryId=10": この式を使用して、categoryId フィールドの値が 100 または 10 のドキュメントをクエリできます。
filter:"(categoryId=100 OR categoryId=10) AND price > 100": この式を使用して、categoryId フィールドの値が 100 または 10 で、price フィールドの値が 100 より大きいドキュメントをクエリできます。
算術式を使用して条件を指定する
構文: filter:"左オペランド 算術演算子 右オペランド 関係演算子 条件値"
左オペランド: 属性フィールドまたは定数。定数は数値または文字列です。
算術演算子: 算術演算子。サポートされている演算子は次のとおりです: + - * /
右オペランド: 属性フィールドまたは定数。定数は数値または文字列です。
条件値: 属性フィールドまたは定数。
例:
filter:"price*0.5 > 100": この式を使用して、price フィールドの値に 0.5 を掛けた値が 100 より大きいドキュメントをクエリできます。
filter:"price-cost > 100": この式を使用して、price フィールドの値と cost フィールドの値の差が 100 より大きいドキュメントをクエリできます。
filter:"(price*0.5 > 100) AND categoryId=10": この式を使用して、price フィールドの値に 0.5 を掛けた値が 100 より大きく、categoryId フィールドの値が 10 のドキュメントをクエリできます。
関数を使用して条件を指定する
構文: filter:"関数 関係演算子 右オペランド"
説明: 関数: in や notin などのビルトイン関数。詳細については、このトピックの「ビルトイン関数」セクションをご参照ください。呼び出す関数が BOOLEAN 型の値を返す場合、フィルター式に関係演算子を指定する必要はありません。関係演算子の右オペランドとして関数を指定することもできます。
例:
filter:"in(id,"1|2|3")": この式を使用して、id フィールドの値が 1、2、または 3 であるドキュメントをクエリできます。
次のセクションでは、他のビルトイン関数を使用して条件を指定する方法について説明します。
ビルトイン関数
distance
distance: 2 つの点間の球面距離を返します。ほとんどの場合、この関数は位置情報サービス (LBS) の距離計算で使用されます。
例:
ユーザーの座標から 10 km 以内にある店舗を検索します。この例では、ユーザーの経度と緯度は 120.34256 と 30.56982 です。ドキュメントで店舗の経度と緯度を指定するために使用される lon フィールドと lat フィールドは、属性フィールドとして構成する必要があります。
filter:"distance(lon,lat,\"120.34256\",\"30.56982\")<10"
contain と notcontain
説明:
contain: a フィールドの値に b フィールドの値が含まれているかどうかを確認します。 a フィールドは、単一値フィールドまたは複数値フィールドです。
notcontain: a フィールドの値に b フィールドの値が含まれていないかどうかを確認します。 a フィールドは、単一値フィールドまたは複数値フィールドです。
パラメーター:
contain(a,b)
a: INT32、INT64、または STRING 型の単一値または複数値フィールドを指定します。
b: 定数文字列を指定します。文字列で指定された定数は、縦棒 (
|
) で区切られます。 a フィールドの値が指定された定数のいずれかと一致する場合、この関数は true を返します。
notcontain(a,b)
a: INT32、INT64、または STRING 型の単一値または複数値フィールドを指定します。
b: 定数文字列を指定します。文字列で指定された定数は、縦棒 (
|
) で区切られます。 a フィールドの値が指定された定数のいずれとも一致しない場合、この関数は true を返します。
戻り値:
contain(a,b)
: この関数は BOOLEAN 型の値を返します。有効な値: true と false。true の値は、a フィールドの値に b フィールドの値が含まれていることを示します。false の値は、a フィールドの値に b フィールドの値が含まれていないことを示します。notcontain(a,b)
: この関数は BOOLEAN 型の値を返します。有効な値: true と false。true の値は、a フィールドの値に b フィールドの値が含まれていないことを示します。false の値は、a フィールドの値に b フィールドの値が含まれていることを示します。
例:
contain
関数を使用して、nid フィールドの値に 1、2、または 3 が含まれるドキュメントをクエリします。
filter:"contain(nid, \"1|2|3\")"
notcontain
関数を使用して、nid フィールドの値に 1、2、または 3 が含まれていないドキュメントをクエリします。
filter:"notcontain(nid, \"1|2|3\")"
in と notin
in または notin: フィールド値が特定のリストに含まれているかどうかを確認します。
例:
type フィールドの値が 1、2、または 3 であるドキュメントをクエリします。 type フィールドは INT 型である必要があります。
filter:"in(type, \"1|2|3\")"
type フィールドの値が 1、2、または 3 でないドキュメントをクエリします。 type フィールドは INT32 型である必要があります。
filter:"notin(type, \"1|2|3\")"
使用上の注意
精度の問題により、FLOAT 型または DOUBLE 型の値が別の値と等しいかどうかを確認できません。フィルター式で FLOAT 型または DOUBLE 型のフィールドが必要な場合は、より大きい演算子 (>) またはより小さい演算子 (<) を含む式を使用して関係を定義できます。
フィルター式では、STRING 型の値を二重引用符 ('') で囲む必要があります。文字列を含む式に関係演算子を指定して、文字列と別の値の関係を定義できます。算術演算子を使用して文字列と別の値の関係を定義することはできません。
STRING 型のフィールドを含む式では、等号演算子 (=) または不等号演算子 (!=) を使用できますが、そのような式では、より大きい演算子 (>) またはより小さい演算子 (<) を使用できません。
等号演算子 (=) または不等号演算子 (!=) を使用して複数値フィールドと条件値の関係を定義する場合、複数値フィールドの値に条件値が含まれるドキュメントが返されます。
式内の二重引用符 (") はエスケープする必要があります。