ブール式の規則
この章では、クエリ条件式の書き方について紹介します。
概要
述語式はブール値を出力します。Milvusは述語を使用してスカラーをフィルタリングします。述語式を評価すると、TRUE または FALSE が返ります。述語式の使用方法については、Python SDK API リファレンスを参照してください。
演算子
論理演算子
論理演算子は、2つの式を比較します。
シンボル | 操作 | 例 | 説明 |
---|---|---|---|
'and' && | AND | expr1 && expr2 | expr1 と expr2 が両方とも true の場合、True を返します。 |
'or' || | OR | expr1 || expr2 | expr1 または expr2 のどちらかが true の場合、True を返します。 |
二項演算子
二項演算子は2つのオペランドを取り、基本的な算術演算を行い、対応する結果を返します。
シンボル | 操作 | 例 | 説明 |
---|---|---|---|
+ | 加算 | a + b | 2つのオペランドを加算します。 |
- | 減算 | a - b | 第2オペランドを第1オペランドから減算します。 |
* | 乗算 | a * b | 2つのオペランドを乗算します。 |
/ | 除算 | a / b | 第1オペランドを第2オペランドで除算します。 |
** | 累乗 | a ** b | 第1オペランドを第2乗します。 |
% | 剰余 | a % b | 第1オペランドを第2オペランドで除した余りを返します。 |
関係演算子
関係演算子は、2つの式の間の等価性、不等価性、または相対的な順序を確認するために記号を使用します。
シンボル | 操作 | 例 | 説明 |
---|---|---|---|
< | より小さい | a < b | a が b より小さい場合、True を返します。 |
> | より大きい | a > b | a が b より大きい場合、True を返します。 |
== | 等しい | a == b | a が b と等しい場合、True を返します。 |
!= | 等しくない | a != b | a が b と等しくない場合、True を返します。 |
<= | 以下 | a <= b | a が b 以下の場合、True を返します。 |
>= | 以上 | a >= b | a が b 以上の場合、True を返します。 |
演算子の優先順位と結合性
次の表は、演算子の優先順位と結合性を示しています。演算子は、上から下に優先順位順にリストされています。
優先順位 | 演算子 | 説明 | 結合性 |
---|---|---|---|
1 | + - | 単項算術演算子 | 左から右へ |
2 | not | 単項論理演算子 | 右から左へ |
3 | ** | 二項算術演算子 | 左から右へ |
4 | * / % | 二項算術演算子 | 左から右へ |
5 | + - | 二項算術演算子 | 左から右へ |
6 | < <= > >= | 比較演算子 | 左から右へ |
7 | == != | 比較演算子 | 左から右へ |
8 | like LIKE | マッチ演算子 | 左から右へ |
9 | json_contains JSON_CONTAINS | JsonArray演算子 | 左から右へ |
10 | json_contains_all JSON_CONTAINS_ALL | JsonArray演算子 | 左から右へ |
11 | json_contains_any JSON_CONTAINS_ANY | JsonArray演算子 | 左から右へ |
12 | && and | 二項論理演算子 | 左から右へ |
13 | || or | 二項論理演算子 | 左から右へ |
式は通常、左から右へと評価されます。複雑な式は1つずつ評価されます。式の評価順序は、使用される演算子の優先順位によって決定されます。
式に2つ以上の優先順位が同じ演算子が含まれる場合、左端の演算子が最初に評価されます。
例えば、10 / 2 * 5 は (10 / 2) と評価され、その結果に 5 が乗算されます。
低い優先順位の操作を優先する必要がある場合は、それらを括弧で囲む必要があります。
例えば、30 / 2 + 8 です。通常は 30 を 2 で割り、その後 8 を結果に加えます。2 で割ってから 8 を加えたい場合は、30 / (2 + 8) と記述する必要があります。
括弧は式内でネストすることができます。最も内側の括弧が最初に評価されます。
Example conditions
以下は、Milvusで利用可能なすべてのブール式の例です(int64
はINT64型データを含むスカラーフィールドを表し、float
は浮動小数点型データを含むスカラーフィールドを表し、VARCHAR
はVARCHAR型データを含むスカラーフィールドを表します):
- 比較式
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- 論理演算と括弧
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
- in式
Milvusでは、明示的に定義された主キーを持つエンティティの削除のみをサポートしており、これは in
条件式を通じてのみ実現できます。
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- TermExpr、BinaryLogicalOp、およびCmpOp(異なるフィールド上)
"int64 in [1, 2, 3] and float != 2"
- BinaryLogicalOpとCmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOpとUnaryArithOpまたはBinaryArithOp
"200+300 < int64"
- MatchOp(接頭辞マッチング)
VARCHAR like "prefix%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
JSON_CONTAINS
(2番目のパラメータ)ステートメントにあるJSON式がリストの場合、identifier(第1パラメータ)はリストのリストである必要があります。それ以外の場合、ステートメントは常にFalseに評価されます。
json_contains(x, 1) # ==> true
json_contains(x, "a") # ==> false
json_contains(x, [1,2,3]) # ==> true
json_contains(x, [3,2,1]) # ==> false
-
JSON_CONTAINS_ALL(identifier, JsonExpr)
JSON_CONTAINS_ALL
ステートメントにあるJSON式は常にリストである必要があります。
json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (6は存在しない)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
JSON_CONTAINS_ANY
ステートメントにあるJSON式は常にリストである必要があります。それ以外の場合、その動作はJSON_CONTAINS
と同じです。
json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false