メインコンテンツまでスキップ

フィルタリングの仕組み

Zilliz Cloud は、データを正確にクエリできる強力なフィルタリング機能を提供します。フィルター式を使用すると、フィールド値に基づいてエンティティを選択し、さまざまな条件で検索結果を絞り込めます。このガイドでは、クエリ操作を中心とした例を用いて、Zilliz Cloud のクラスターでフィルター式を使用する方法を説明します。これらのフィルターは、検索リクエストと削除リクエストにも適用できます。

基本演算子​

Zilliz Cloud は、データのフィルタリングに使用できるいくつかの基本演算子をサポートしています:

  • 比較演算子: ==、!=、>、<、>=、<= は、数値フィールドまたはテキストフィールドに基づくフィルタリングを可能にします。

  • 範囲フィルターとパターンフィルター: IN、LIKE、=~、!~ は、値、ワイルドカードパターン、または正規表現パターンに一致します。文字列パターンの詳細については、Pattern Matching を参照してください。

  • 算術演算子: +、-、*、/、%、** は、数値フィールドを含む計算に使用します。

  • ビット演算子: 以降では、&、|、^ は、権限やステータスビットなど、複数のフラグをエンコードした整数フィールドをフィルタリングします。詳細については、Basic Operators を参照してください。

  • 論理演算子: AND、OR、NOT は、複数の条件を複雑な式に結合します。

  • IS NULL 演算子と IS NOT NULL 演算子: IS NULL を使用して、フィールド値が NULL のエンティティを選択するか、IS NOT NULL を使用して、フィールド値が NULL でないエンティティを選択します。これらの演算子はスカラーフィールドをサポートします。サポートされる型、構文、例については、IS NULL and IS NOT NULL operators を参照してください。

例:色によるフィルタリング​

スカラーフィールド color で原色(赤、緑、青)を持つエンティティを検索するには、次のフィルター式を使用します:

python
filter='color in ["red", "green", "blue"]'

例:権限ビットによるフィルタリング​

整数の permissions フィールドで SHARE ビットが設定されているエンティティを検索するには、ビット単位の AND 演算子(&)を使用します:

python
filter='(permissions & 4) == 4'

例:正規表現パターンによるフィルタリング​

message フィールドに E1001 などのエラーコードが含まれるエンティティを検索するには、正規表現一致演算子 =~ を使用します:

python
filter='message =~ "E[0-9]{4}"'

正規表現フィルターは部分文字列マッチングを使用します。フィールド値全体がパターンに一致する必要がある場合は、^ と $ のアンカーを追加します。詳細については、Pattern Matching を参照してください。

例:JSON フィールドのフィルタリング​

Zilliz Cloud では、JSON フィールドのキーを参照できます。たとえば、price と model というキーを持つ JSON フィールド product があり、特定のモデルで価格が 1,850 未満の商品を検索する場合は、次のフィルター式を使用します:

python
filter='product["model"] == "JSN-087" AND product["price"] < 1850'

例:配列フィールドのフィルタリング​

2000 年以降に観測所が報告した平均気温の記録を含む配列フィールド history_temperatures があり、2009 年の気温(記録された 10 番目の値)が 23°C を超える観測所を検索する場合は、次の式を使用します:

python
filter='history_temperatures[10] > 23'

これらの基本演算子の詳細については、Basic Operators を参照してください。

フィルター式テンプレート​

CJK 文字を使用してフィルタリングする場合、文字セットが大きくエンコーディングが異なるため、処理が複雑になることがあります。特に IN 演算子では、パフォーマンスが低下する可能性があります。

Zilliz Cloud は、CJK 文字を扱う際のパフォーマンスを最適化するために、フィルター式テンプレートを導入しています。動的な値をフィルター式から分離することで、クエリエンジンはパラメーターの挿入をより効率的に処理します。

25 歳を超え、"北京"(北京)または "上海"(上海)に住む個人を検索するには、次のテンプレート式を使用します:

python
filter = "age > 25 AND city IN ['北京', '上海']"

パフォーマンスを向上させるには、パラメーターを使用する次のバリエーションを使用します:

python
filter = "age > {age} AND city in {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}

このアプローチでは、解析のオーバーヘッドが削減され、クエリ速度が向上します。詳細については、Filter Templating を参照してください。

データ型固有の演算子​

Zilliz Cloud は、JSON、ARRAY、VARCHAR フィールドなど、特定のデータ型向けの高度なフィルタリング演算子を提供します。

JSON フィールド固有の演算子​

Zilliz Cloud は、JSON フィールドをクエリするための高度な演算子を提供し、複雑な JSON 構造内での正確なフィルタリングを可能にします:

JSON_CONTAINS(identifier, jsonExpr): フィールドに JSON 式が存在するかどうかを確認します。

python
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'

JSON_CONTAINS_ALL(identifier, jsonExpr): JSON 式のすべての要素が存在することを保証します。

python
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'

JSON_CONTAINS_ANY(identifier, jsonExpr): JSON 式内の少なくとも 1 つの要素が存在するエンティティをフィルタリングします。

python
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'

JSON 演算子の詳細については、JSON Operators を参照してください。

ARRAY フィールド固有の演算子​

Zilliz Cloud は、ARRAY_CONTAINS、ARRAY_CONTAINS_ALL、ARRAY_CONTAINS_ANY、ARRAY_LENGTH など、配列フィールド向けの高度なフィルタリング演算子を提供し、配列データをきめ細かく制御できます:

ARRAY_CONTAINS: 特定の要素を含むエンティティをフィルタリングします。

python
filter="ARRAY_CONTAINS(history_temperatures, 23)"

ARRAY_CONTAINS_ALL: リスト内のすべての要素が存在するエンティティをフィルタリングします。

python
filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"

ARRAY_CONTAINS_ANY: リストのいずれかの要素を含むエンティティをフィルタリングします。

python
filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"

ARRAY_LENGTH: 配列の長さに基づいてフィルタリングします。

python
filter="ARRAY_LENGTH(history_temperatures) < 10"

配列演算子の詳細については、ARRAY Operators を参照してください。

VARCHAR フィールド固有の演算子​

Zilliz Cloud は、VARCHAR フィールドでの正確なテキスト検索用の専用演算子を提供します:

パターンマッチング演算子​

LIKE、=~、!~ 演算子は、VARCHAR フィールド、JSON 文字列パス、および特定の ARRAY<VARCHAR> 要素の文字列パターンに一致します。単純なワイルドカードパターンには LIKE を使用します。RE2 正規表現には =~ と !~ を使用します。

詳細については、Pattern Matching を参照してください。

TEXT_MATCH 演算子​

TEXT_MATCH 演算子を使用すると、特定のクエリ語句に基づいてドキュメントを正確に取得できます。これは、スカラーフィルターとベクトル類似性検索を組み合わせたフィルター検索に特に役立ちます。セマンティック検索とは異なり、Text Match は語句の完全な出現に焦点を当てます。

Zilliz Cloud は、Tantivy を使用して転置インデックスと語句ベースのテキスト検索をサポートしています。このプロセスには次のものが含まれます:

  1. アナライザー: 入力テキストをトークン化して処理します。

  2. インデックス作成: 一意のトークンをドキュメントにマッピングする転置インデックスを作成します。

詳細については、Text Match を参照してください。

PHRASE_MATCH 演算子​

PHRASE_MATCH 演算子は、クエリ語句の順序と隣接性の両方を考慮し、完全なフレーズ一致に基づいてドキュメントを正確に取得できるようにします。

詳細については、Phrase Match を参照してください。