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

ARRAY 演算子

Zilliz Cloud は、ARRAY フィールドのフィルタリングと ARRAY フィールド値の部分更新に使用する ARRAY 演算子を提供します。

📘Notes

配列内のすべての要素は同じ型である必要があり、配列内のネストされた構造はプレーン文字列として扱われます。したがって、ARRAY フィールドを扱う際は、過度に深いネストを避け、最適なパフォーマンスを得るためにデータ構造をできるだけフラットにすることをお勧めします。

Zilliz Cloud の ARRAY 演算子は、次の 2 つの使用シナリオに対応しています:

  • クエリおよび検索用のフィルター式。

  • upsert リクエストでの部分更新。

利用可能な ARRAY 演算子​

次の表に、Zilliz Cloud で利用可能な ARRAY 演算子を示します。

演算子使用場所説明
ARRAY_CONTAINS(identifier, expr)フィルター式ARRAY フィールドに特定の要素が存在するかどうかを確認します。
ARRAY_CONTAINS_ALL(identifier, expr)フィルター式指定したリストのすべての要素が ARRAY フィールドに存在するかどうかを確認します。
ARRAY_CONTAINS_ANY(identifier, expr)フィルター式指定したリスト内のいずれかの要素が ARRAY フィールドに存在するかどうかを確認します。
ARRAY_LENGTH(identifier)フィルター式ARRAY フィールド内の要素数を返します。フィルタリング時に比較演算子と組み合わせることができます。
ARRAY_APPENDfield_ops を使用した upsert既存の ARRAY フィールドにペイロードの要素を追加します。Milvus v2.6.17 以降で利用できます。
ARRAY_REMOVEfield_ops を使用した upsertリクエストペイロード内の値に一致するすべての要素を、既存の ARRAY フィールドから削除します。Milvus v2.6.17 以降で利用できます。

ARRAY_CONTAINS​

ARRAY_CONTAINS 演算子は、配列フィールドに特定の要素が存在するかどうかを確認します。配列内に特定の要素が存在するエンティティを検索する場合に便利です。

例

history_temperatures という配列フィールドがあり、さまざまな年の記録された最低気温が格納されているとします。配列に値 23 が含まれるすべてのエンティティを検索するには、次のフィルター式を使用できます:

python
filter = 'ARRAY_CONTAINS(history_temperatures, 23)'

これにより、history_temperatures 配列に値 23 が含まれるすべてのエンティティが返されます。

ARRAY_CONTAINS_ALL​

ARRAY_CONTAINS_ALL 演算子は、指定したリストのすべての要素が配列フィールドに存在することを確認します。配列内に複数の値が含まれるエンティティを一致させたい場合に便利です。

例

history_temperatures 配列に 23 と 24 の両方が含まれるすべてのエンティティを検索するには、次のようにします:

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

これにより、history_temperatures 配列に指定した両方の値が含まれるすべてのエンティティが返されます。

ARRAY_CONTAINS_ANY​

ARRAY_CONTAINS_ANY 演算子は、指定したリスト内のいずれかの要素が配列フィールドに存在するかどうかを確認します。配列内に指定した値の少なくとも 1 つが含まれるエンティティを一致させたい場合に便利です。

例

history_temperatures 配列に 23 または 24 のいずれかが含まれるすべてのエンティティを検索するには、次のようにします:

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

これにより、history_temperatures 配列に 23 または 24 の値のうち少なくとも 1 つが含まれるすべてのエンティティが返されます。

ARRAY_LENGTH​

ARRAY_LENGTH は、配列フィールドの長さ(要素数)を返します。パラメーターは 1 つだけ受け取り、配列フィールドの識別子を指定します。

例

history_temperatures 配列の要素数が 10 未満のすべてのエンティティを検索するには、次のようにします:

python
filter = 'ARRAY_LENGTH(history_temperatures) < 10'

これにより、history_temperatures 配列の要素数が 10 未満のすべてのエンティティが返されます。

ARRAY_APPEND​

ARRAY_APPEND 演算子は、upsert リクエスト中に既存の ARRAY フィールドへペイロードの要素を追加します。これはフィルター式ではありません。現在の配列値を先にクエリせずに配列へ値を追加する場合に使用します。

次の例では、主キーが 1 のエンティティの tags ARRAY フィールドに "premium" を追加します:

python
from pymilvus import FieldOp

client.upsert(
collection_name="users",
data=[{"pk": 1, "tags": ["premium"]}],
field_ops={"tags": FieldOp.array_append()},
)

field_ops を通じて ARRAY_APPEND をフィールドに適用すると、そのフィールドの部分更新セマンティクスが有効になります。ワークフロー全体、サポートされる要素型、制限事項については、Upsert ARRAY fields in merge mode を参照してください。

ARRAY_REMOVE​

ARRAY_REMOVE 演算子は、upsert リクエスト中に、リクエストペイロード内の値に一致するすべての要素を既存の ARRAY フィールドから削除します。これはフィルター式ではありません。現在の配列値を先にクエリせずに、一致する値を配列から削除する場合に使用します。

次の例では、主キーが 1 のエンティティの tags ARRAY フィールドから "trial" を削除します:

python
from pymilvus import FieldOp

client.upsert(
collection_name="users",
data=[{"pk": 1, "tags": ["trial"]}],
field_ops={"tags": FieldOp.array_remove()},
)

field_ops を通じて ARRAY_REMOVE をフィールドに適用すると、そのフィールドの部分更新セマンティクスが有効になります。ワークフロー全体、サポートされる要素型、制限事項については、Upsert ARRAY fields in merge mode を参照してください。