基本演算子
Zilliz Cloudは、データのフィルタリングとクエリを効率的に行うための豊富な基本演算子を提供しています。これらの演算子を使用すると、スカラーフィールド、数値計算、論理条件などを基に検索条件を絞り込めます。これらの演算子の使用方法を理解することは、正確なクエリを構築し、検索の効率を最大化するために不可欠です。
比較演算子
比較演算子は、等価性、不等価性、または大きさに基づいてデータをフィルタリングするために使用されます。これらは数値フィールドとテキストフィールドに適用できます。
サポートされている比較演算子:
-
==(等しい) -
!=(等しくない) -
>(より大きい) -
<(より小さい) -
>=(以上) -
<=(以下)
例1: 等価演算子 (==) によるフィルタリング
statusという名前のフィールドがあり、statusが"active"であるすべてのエンティティを検索したいとします。等価演算子==を使用できます。
filter = 'status == "active"'
例2: 不等価演算子 (!=) によるフィルタリング
statusが"inactive"ではないエンティティを検索する場合は以下のようにします。
filter = 'status != "inactive"'
例3: 大なり演算子 (>) によるフィルタリング
ageが30より大きいすべてのエンティティを検索する場合:
filter = 'age > 30'
例4: 小なり演算子によるフィルタリング
priceが100より小さいエンティティを検索するには:
filter = 'price < 100'
例5: 以上演算子 (>=) によるフィルタリング
ratingが4以上であるすべてのエンティティを検索する場合:
filter = 'rating >= 4'
例6: 以下演算子によるフィルタリング
discountが10%以下であるエンティティを検索するには:
filter = 'discount <= 10'
範囲演算子
範囲演算子は、特定のセットまたは値の範囲に基づいてデータをフィルタリングするのに役立ちます。
サポートされている範囲演算子:
-
IN: 特定のセットまたは範囲内の値に一致させるために使用されます。 -
LIKE: パターンマッチングに使用されます(主にテキストフィールド)。
例1: INを使用して複数の値に一致させる
colorが"red"、"green"、"blue"のいずれかであるすべてのエンティティを検索する場合は以下の通りです。
filter = 'color in ["red", "green", "blue"]'
これは、値のリスト内での所属関係を確認したい場合に有用です。
例2: LIKEを使用したパターンマッチング
LIKE演算子は文字列フィールドでのパターンマッチングに使用されます。テキスト内の異なる位置にサブストリングが一致するかどうかを確認できます:プレフィックス(前方一致)、インフィックス(中間一致)、またはサフィックス(後方一致)。LIKE演算子は%記号をワイルドカードとして使用し、任意の数の文字(0文字を含む)に一致させることができます。
多くの場合、インフィックスまたはサフィックスの一致はプレフィックス一致よりも著しく低速です。パフォーマンスが重要である場合は注意して使用してください。
プレフィックス一致(前方一致)
プレフィックス一致を実行する場合、文字列があるパターンで始まるかどうかを確認するために、パターンを先頭に置き、その後に任意の文字に一致する%を使用します。たとえば、nameが"Prod"で始まるすべての製品を検索するには以下のようにします。
filter = 'name LIKE "Prod%"'
これにより、"Product A"、"Product B"など、"Prod"で始まる名前のすべての製品と一致します。
サフィックス一致(後方一致)
サフィックス一致の場合は、文字列があるパターンで終わるかどうかを確認するために、パターンの先頭に%記号を置きます。たとえば、nameが"XYZ"で終わるすべての製品を検索するには以下のようにします。
filter = 'name LIKE "%XYZ"'
これにより、"ProductXYZ"、"SampleXYZ"などのように名前が"XYZ"で終わるすべての製品と一致します。
インフィックス一致(包含)
インフィックス一致を実行し、パターンが文字列内のどこにでも出現可能な場合は、パターンの前後両方に%記号を置くことができます。たとえば、nameに"Pro"という単語を含むすべての製品を検索するには以下のようにします。
filter = 'name LIKE "%Pro%"'
これにより、"Product"、"ProLine"、"SuperPro"など、名前に"Pro"というサブストリングを含むすべての製品と一致します。
算術演算子
算術演算子を使用すると、数値フィールドを含む計算に基づく条件を作成できます。
サポートされている算術演算子:
-
+(加算) -
-(減算) -
*(乗算) -
/(除算) -
%(剰余) -
**(累乗)
例1: 剰余 (%) の使用
idが偶数(つまり、2で割り切れる)であるエンティティを検索する場合:
filter = 'id % 2 == 0'
例2: べき乗 (**) の使用
priceの2乗が1000より大きいエンティティを検索する場合:
filter = 'price ** 2 > 1000'
論理演算子
論理演算子は、複数の条件を組み合わせてより複雑なフィルター式を作成するために使用されます。これにはAND、OR、およびNOTが含まれます。
サポートされている論理演算子:
-
AND: すべてが真である必要がある複数の条件を組み合わせます。 -
OR: 少なくとも1つが真である必要がある条件を組み合わせます。 -
NOT: 条件を否定します。
例1: ANDを使用して条件を組み合わせる
priceが100より大きく、かつstockが50より大きいすべての製品を検索する場合:
filter = 'price > 100 AND stock > 50'
例2: ORを使用して条件を組み合わせる
colorが"red"または"blue"であるすべての製品を検索する場合:
filter = 'color == "red" OR color == "blue"'
例3: NOTを使用して条件を除外する
colorが"green"ではないすべての製品を検索する場合:
filter = 'NOT color == "green"'
IS NULLおよびIS NOT NULL演算子
IS NULLおよびIS NOT NULL演算子は、フィールドにnull値(データの不在)が含まれているかどうかに基づいてフィルタリングするために使用されます。
-
IS NULL: 特定のフィールドにnull値(つまり、値が存在しないまたは未定義)を含むエンティティを識別します。 -
IS NOT NULL: 特定のフィールドにnull以外の値(つまり、有効な定義済みの値)を含むエンティティを識別します。
これらの演算子は大文字小文字を区別しないため、IS NULLまたはis null、およびIS NOT NULLまたはis not nullを使用できます。
null値を持つ通常のスカラーフィールド
Zilliz Cloudでは、null値を持つ通常のスカラーフィールド(文字列や数値など)に対してフィルタリングが可能です。
VARCHARフィールドに対して空文字列""はnull値として扱われません。
descriptionフィールドがnullであるエンティティを取得するには:
filter = 'description IS NULL'
descriptionフィールドがnullでないエンティティを取得するには:
filter = 'description IS NOT NULL'
descriptionフィールドがnullでなく、priceフィールドが10より大きいエンティティを取得するには:
filter = 'description IS NOT NULL AND price > 10'
null値を持つJSONフィールド
Zilliz Cloudでは、null値を含むJSONフィールドのフィルタリングが可能です。JSONフィールドは以下の方法でnullとして扱われます:
-
全体のJSONオブジェクトが明示的にNone(null)に設定されている場合、たとえば
{"metadata": None}。 -
JSONフィールド自体がエンティティから完全に欠落している場合。
JSONオブジェクト内の一部の要素がnull(例えば個々のキー)であっても、そのフィールドは依然としてnullでないと見なされます。たとえば、{"metadata": {"category": None, "price": 99.99}}は、categoryキーがnullであっても、nullとして扱われません。
Zilliz Cloudがnull値を含むJSONフィールドをどのように処理するかをさらに説明するために、JSONフィールドmetadataを使用した以下のサンプルデータを検討してください。
data = [
{
"metadata": {"category": "electronics", "price": 99.99, "brand": "BrandA"},
"pk": 1,
"embedding": [0.12, 0.34, 0.56]
},
{
"metadata": None, # 全体のJSONオブジェクトがnull
"pk": 2,
"embedding": [0.56, 0.78, 0.90]
},
{ # JSONフィールド`metadata`が完全に欠落している
"pk": 3,
"embedding": [0.91, 0.18, 0.23]
},
{
"metadata": {"category": None, "price": 99.99, "brand": "BrandA"}, # 個別のキー値がnull
"pk": 4,
"embedding": [0.56, 0.38, 0.21]
}
]
例1: metadataがnullのエンティティを取得する
metadataフィールドが欠落しているか、明示的にNoneに設定されているエンティティを検索するには:
filter = 'metadata IS NULL'
# 例の出力:
# data: [
# "{'metadata': None, 'pk': 2}",
# "{'metadata': None, 'pk': 3}"
# ]
例2: metadataがnullでないエンティティを取得する
metadataフィールドがnullでないエンティティを検索するには:
filter = 'metadata IS NOT NULL'
# 例の出力:
# data: [
# "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
# "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]
null値を持つARRAYフィールド
Zilliz Cloudでは、null値を含むARRAYフィールドのフィルタリングが可能です。ARRAYフィールドは以下の方法でnullとして扱われます:
-
全体のARRAYフィールドが明示的にNone(null)に設定されている場合、たとえば、
"tags": None。 -
ARRAYフィールドがエンティティから完全に欠落している場合。
ARRAYフィールドは、すべての要素が同じデータ型を持つ必要があるため、ARRAYフィールドは部分的にnull値を含むことはできません。詳細については、配列フィールドを参照してください。
Zilliz Cloudがnull値を含むARRAYフィールドをどのように処理するかをさらに説明するために、ARRAYフィールドtagsを持つ以下のサンプルデータを検討してください。
data = [
{
"tags": ["pop", "rock", "classic"],
"ratings": [5, 4, 3],
"pk": 1,
"embedding": [0.12, 0.34, 0.56]
},
{
"tags": None, # 全体のARRAYがnull
"ratings": [4, 5],
"pk": 2,
"embedding": [0.78, 0.91, 0.23]
},
{ # tagsフィールドが完全に欠落している
"ratings": [9, 5],
"pk": 3,
"embedding": [0.18, 0.11, 0.23]
}
]
例1: tagsがnullのエンティティを取得する
tagsフィールドが欠落しているか明示的にNoneに設定されているエンティティを取得するには:
filter = 'tags IS NULL'
# 例の出力:
# data: [
# "{'tags': None, 'ratings': [4, 5], 'embedding': [0.78, 0.91, 0.23], 'pk': 2}",
# "{'tags': None, 'ratings': [9, 5], 'embedding': [0.18, 0.11, 0.23], 'pk': 3}"
# ]
例2: tagsがnullでないエンティティを取得する
tagsフィールドがnullでないエンティティを取得するには:
filter = 'tags IS NOT NULL'
# 例の出力:
# data: [
# "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
# "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]
JSONおよびARRAYフィールドでの基本演算子の使用に関するヒント
Zilliz Cloudクラスター内の基本演算子は多機能で、スカラーフィールドに適用できるだけでなく、JSONおよびARRAYフィールド内のキーおよびインデックスに対しても効果的に使用できます。
たとえば、price、model、およびtagsのような複数のキーを含むproductフィールドがある場合、常にキーを直接参照してください。
filter = 'product["price"] > 1000'
記録された温度の配列内の最初の温度が特定の値を超えるレコードを検索するには以下を使用してください。
filter = 'history_temperatures[0] > 30'
まとめ
Zilliz Cloudは、データのフィルタリングとクエリにおいて柔軟性を提供する一連の基本演算子を提供しています。比較、範囲、算術、および論理演算子を組み合わせることで、強力なフィルター式を作成し、検索結果を絞り込んで必要なデータを効率的に取得できます。
FAQ
フィルター条件での一致値リストの長さには制限がありますか(例:filter='color in ["red", "green", "blue"]')?リストが長すぎる場合はどうすればよいですか?
Zilliz Cloudは、フィルター条件内の一致値リストの長さに制限を設けていません。ただし、リストが長すぎるとクエリパフォーマンスに著しく影響を与える可能性があります。
フィルター条件に長い一致値リストまたは多数の要素を含む複雑な式が含まれている場合は、フィルターーテンプレートを使用してクエリパフォーマンスを向上させることをお勧めします。