メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

基本演算子

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'

論理演算子

論理演算子は、複数の条件を組み合わせてより複雑なフィルター式を作成するために使用されます。これにはANDORNOTが含まれます。

サポートされている論理演算子:

  • AND:すべてがTrueでなければならない複数の条件を組み合わせます。

  • OR:少なくとも1つがTrueである条件を組み合わせます。

  • 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 nullIS 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フィールドには部分的なnull値を含めることができません。ARRAYフィールド内のすべての要素は同じデータ型でなければなりません。詳細については、Arrayフィールドを参照してください。

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フィールド内のキーおよびインデックスに対しても効果的に使用できます。

たとえば、pricemodel、およびtagsなどの複数のキーを含むproductフィールドがある場合、常にキーを直接参照してください:

filter = 'product["price"] > 1000'

記録された気温の配列内で最初の気温が特定の値を超えるレコードを検索するには:

filter = 'history_temperatures[0] > 30'

結論

Zilliz Cloudは、データをフィルタリングおよびクエリするための柔軟性を提供する一連の基本演算子を提供します。比較、範囲、算術、および論理演算子を組み合わせることで、強力なフィルター式を作成し、検索結果を絞り込み、必要なデータを効率的に取得できます。

FAQ

フィルター条件内のマッチ値リストの長さに制限はありますか(例:filter='color in ["red", "green", "blue"]')?リストが長すぎる場合どうすればよいですか?

Zilliz Cloudでは、フィルター条件内のマッチ値リストの長さに制限は設けていません。ただし、非常に長いリストはクエリ性能に大幅な影響を与える可能性があります。 フィルター条件に多くのマッチ値のリストや多くの要素を含む複雑な式を含む場合は、クエリ性能を向上させるためにフィルター テンプレートの使用を推奨します。