配列演算子
Milvusは、配列フィールドをクエリするための強力な演算子を提供しており、配列の内容に基づいてエンティティをフィルタリングして取得することができます。
配列内の要素はすべて同じ型でなければならず、配列内の入れ子構造はプレーンな文字列として扱われます。したがって、ARRAYフィールドを扱う際には、過度な深い入れ子は避け、 できるだけ平坦なデータ構造にしてパフォーマンスを最適化することを推奨します。
使用可能なARRAY演算子
Milvusでは、ARRAY演算子により、配列フィールドに対するきめ細かな問い合わせが可能です。これらの演算子は以下の通りです。
ARRAY_CONTAINS(identifier, expr)
: 配列フィールドに特定の要素が存在するかどうかをチェックします。ARRAY_CONTAINS_ALL(identifier, expr)
指定されたリストのすべての要素が配列フィールドに存在するか確認します。ARRAY_CONTAINS_ANY(identifier, expr)
指定されたリストの要素のいずれかが配列フィールドに存在するかどうかをチェックする。ARRAY_LENGTH(identifier, expr)
: 配列フィールドの要素数に基づいてエンティティをフィルタリングできます。
ARRAY_CONTAINS
ARRAY_CONTAINS
演算子は、配列フィールドに特定の要素が存在するかどうかを調べます。指定した要素が配列に存在するエンティティを見つけたい場合に便利です。
例
さまざまな年の最低気温の記録を含む配列フィールドhistory_temperatures
があるとします。配列に値23
が含まれるすべてのエンティティを検索するには、以下のフィルタ式を使用できます。
filter = 'ARRAY_CONTAINS(history_temperatures, 23)'
これは、配列history_temperatures
に値23
が含まれるすべてのエンティティを返します。
array_contains_all
ARRAY_CONTAINS_ALL
演算子は、指定したリストのすべての要素が配列フィールドに存在することを保証します。この演算子は、配列に複数の値が含まれるエンティティにマッチさせたい場合に便利です。
例
history_temperatures
配列に23
と24
の両方が含まれるエンティティをすべて検索する場合は、この演算子を使 用できます。
filter = 'ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])'
これは、history_temperatures
配列に指定した値の両方が含まれるすべてのエンティティを返します。
array_contains_any
ARRAY_CONTAINS_ANY
演算子は、指定したリストの要素が配列フィールドに存在するかどうかを調べます。これは、指定された値の少なくとも 1 つが配列に含まれるエンティティにマッチする場合に便利です。
例
history_temperatures
配列に23
または24
のいずれかが含まれるエンティティをすべて検索するには、 を使用できます。
filter = 'ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])'
これは、history_temperatures
配列に値23
または24
の少なくともいずれかが含まれるすべてのエンティティを返します。
ARRAY_LENGTH
ARRAY_LENGTH
演算子を使用すると、配列フィールドの要素数に基づいてエンティティをフィルタリングできます。これは、特定の長さの配列を持つエンティティを見つける必要がある場合に便利です。
例
history_temperatures
配列の要素数が 10 未満のエンティティをすべて見つけたい場合は、次のようにします。
filter = 'ARRAY_LENGTH(history_temperatures) < 10'
これは、history_temperatures
配列の要素数が 10 未満のエンティティをすべて返します。