query()
この操作は、指定されたブール式によるスカラーフィルタリングを実行します。
このメソッドは、dedicated serving クラスターおよび on-demand compute にのみ適用されます。
-
serving クラスターのコレクションでこの操作を実行するには、クラスターエンドポイントを使用して MilvusClient を作成してください。
-
Free & Serverless
https://{cluster-id}.serverless.{region}.vectordb.zillizcloud.com -
Dedicated
https://{cluster-id}.{region}.vectordb.zillizcloud.com:19530
-
-
on-demand compute 用のコレクションでこの操作を実行するには、project エンドポイントを使用して MilvusClient を作成し、その後、検索用に on-demand クラスターへアタッチするセッションを作成してください。
https://{project-id}.{region}.api.zillizcloud.com
Request syntax
query(
collection_name: str,
filter: str,
output_fields: Optional[List[str]] = None,
timeout: Optional[float] = None,
partition_names: Optional[List[str]] = None,
**kwargs,
) -> List[dict]
PARAMETERS:
-
collection_name (str) -
[REQUIRED]
既存のコレクションの名前。
-
filter (str) -
[REQUIRED]
一致するエンティティをフィルタリングするためのスカラーフィルタリング条件。
スカラーフィルタリングをスキップするには、このパラメータを空文字列に設定できます。スカラーフィルタリング条件の作成方法については、Filtering Overview を参照してください。
-
output_fields (list[str] | None) -
返される各エンティティに含めるフィールド名のリスト。
デフォルト値は None です。
Notes-
これを
output_fields=["\*"]に設定すると、すべてのフィールドが出力されます。 -
これを
output_fields=["count(\*)"]に設定すると、filter 引数で指定された条件に一致するロード済みのエンティティが出力されます。 -
group_by_fieldsと併用する場合、このリストでは集計式count(*),count(<field>),min(<field>),max(<field>),sum(<field>),avg(<field>)も受け付けます。集計値はグループごとに計算され、グループキーとともに返されます。
-
-
timeout (float | None) -
この操作のタイムアウト時間です。これを None に設定すると、何らかの応答が到着するか、何らかのエラーが発生した時点でこの操作がタイムアウトすることを示します。
-
partition_names (list[str] | None) -
パーティション名のリスト。
デフォルト値は None です。指定した場合、指定したパーティションのみがクエリの対象になります。
-
kwargs -
-
consistency_level (str | int) -
対象コレクションの整合性レベル。
デフォルト値は、現在のコレクションを作成するときに指定した値です。オプションは Strong (0)、Bounded (1)、Session (2)、Eventually (3) です。
Note整合性レベルとは何ですか?
分散データベースにおける整合性とは、特定の時点でデータの書き込みまたは読み取りを行う際に、すべてのノードまたはレプリカが同じデータビューを持つことを保証する特性を指します。
Zilliz Cloud は Strong、Bounded Staleness、Eventually の 3 つの整合性レベルを提供しており、デフォルトは Bounded Staleness に設定されています。
ベクトル類似検索またはクエリを実行する際に整合性レベルを簡単に調整し、アプリケーションに最適な設定にできます。
-
guarantee_timestamp (int) -
A valid timestamp.
このパラメータを設定した場合、このタイムスタンプより前に挿入されたすべてのエンティティがクエリノードから可視である場合にのみ、クエリが実行されます。
Notesこのパラメータは、デフォルトの整合性レベルが適用される場合に有効です。
-
graceful_time (int) -
秒単位の期間。
デフォルト値は 5 です。このパラメータを設定した場合、現在のタイムスタンプからこの値を差し引いて guarantee timestamp を計算します。
Notesこのパラメータは、デフォルト以外の整合性レベルが適用される場合に有効です。
-
offset (int) -
クエリ結果でスキップするレコード数。
このパラメータを
limitと組み合わせて使用すると、ページネーションを有効にできます。この値と
limitの合計は 16,384 未満である必要があります。 -
limit (int) -
クエリ結果で返すレコード数。
このパラメータを
offsetと組み合わせて使用すると、ページネーションを有効にできます。この値と
offsetの合計は 16,384 未満である必要があります。 -
timezone (str)
IANA identifier(たとえば Asia/Shanghai, America/Chicago, UTC)を設定することで、単一のクエリに対してコレクションまたはデータベースのデフォルトタイムゾーンを一時的に上書きします。これは、その操作中にのみ
TIMESTAMPTZ値がどのように解釈、表示、比較されるかを制御するものであり、保存済みデータやコレクション設定は変更しません。詳細については、TIMESTAMPZ Field を参照してください。
-
time_fields (str)
query または search 操作の実行中に、
TIMESTAMPTZフィールドから特定の時間コンポーネントを抽出します。抽出する要素はカンマ区切りのリストで指定します。サポートされる要素はyear、month、day、hour、minute、second、microsecondです。詳細については、TIMESTAMPZ Field を参照してください。
-
order_by (list[str])
クエリ結果を並べ替える対象のフィールドのリスト。各要素は
"field_name:direction"の形式に従い、direction はasc(昇順)またはdesc(降順)のいずれかです。ascとdescは大文字小文字を区別することに注意してください。サポートされるフィールド型: INT8、INT16、INT32、INT64、FLOAT、DOUBLE、VARCHAR。ベクトル、JSON、ARRAY の各フィールドによる並べ替えはサポートされていません。
このパラメータは
limitと併用する必要があります。null 許容フィールドを並べ替える場合、昇順ソートでは NULL 値が末尾に配置され(NULLS LAST)、降順ソートでは先頭に配置されます(NULLS FIRST)。 -
group_by_fields (list[str]) -
クエリ結果をグループ化するスカラーフィールドのリスト。設定すると、
query()は指定したフィールド値の一意な組み合わせごとに 1 行を返し、output_fields内の集計式(count(*),count(<f>),min(<f>),max(<f>),sum(<f>),avg(<f>))はグループごとに計算されます。サポートされるグループ化キーのフィールド型:
INT8、INT16、INT32、INT64、VARCHAR、TIMESTAMPTZ。FLOAT、DOUBLE、ベクトル、JSON、ARRAYの各フィールドでグループ化するとエラーが返されます。group_by_fieldsをlimitと組み合わせて、返されるグループ数の上限を設定できます。集計の入力型のルール:
-
sumとavgは、FLOATおよびDOUBLEを含む数値フィールドのみを受け付けます。いずれかの関数をVARCHARフィールドに適用するとエラーが返されます。 -
sumは整数入力に対してINT64を返し、FLOATまたはDOUBLE入力に対してDOUBLEを返します。avgは常にDOUBLEを返し、countはINT64を返し、minとmaxはフィールド型を保持します。
-
-
RETURN TYPE:
list[dict]
RETURNS:
クエリされたエンティティをそれぞれ表す辞書のリスト。
返されるエンティティの数が想定より少ない場合、コレクション内に重複したエンティティが存在する可能性があります。
EXCEPTIONS:
-
MilvusException
この操作中に何らかのエラーが発生した場合に、この例外が発生します。
-
DataTypeNotMatchException
パラメータ値が必要なデータ型と一致しない場合に、この例外が発生します。
Examples
from pymilvus import MilvusClient
# 1. Set up a milvus client
client = MilvusClient(
uri="https://inxx-xxxxxxxxxxxx.api.gcp-us-west1.zillizcloud.com:19530",
token="user:password"
)
# 2. Create a collection and a partition
client.create_collection(
collection_name="test_collection",
dimension=5
)
client.create_partition(
collection_name="test_collection",
partition_name="partitionA"
)
# 3. Insert data
client.insert(
collection_name="test_collection",
data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
],
)
# {'insert_count': 10}
# 4. Conduct queries
# Query without any scalar filtering condition
# This query returns entities with their ids from 0 to 4.
res = client.query(
collection_name="test_collection",
filter="",
limit=5,
)
print(res)
# [{'id': 0,
# 'vector': [0.35803765, -0.6023496, 0.18414013, -0.26286206, 0.90294385],
# 'color': 'pink_8682'},
# {'id': 1,
# 'vector': [0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295],
# 'color': 'red_7025'},
# {'id': 2,
# 'vector': [0.43742132, -0.55975026, 0.6457888, 0.7894059, 0.20785794],
# 'color': 'orange_6781'},
# {'id': 3,
# 'vector': [0.3172005, 0.97190446, -0.36981148, -0.48608947, 0.9579189],
# 'color': 'pink_9298'},
# {'id': 4,
# 'vector': [0.44523495, -0.8757027, 0.82207793, 0.4640629, 0.3033748],
# 'color': 'red_4794'}]
# Query with pagination
# This query returns entities with their ids from 5 to 9.
res = client.query(
collection_name="test_collection",
filter="",
offset=5,
limit=5
)
print(res)
# [{'vector': [0.9858251, -0.81446517, 0.6299267, 0.12069069, -0.14462778],
# 'color': 'yellow_4222',
# 'id': 5},
# {'vector': [0.8371978, -0.015764369, -0.31062937, -0.56266695, -0.8984948],
# 'color': 'red_9392',
# 'id': 6},
# {'vector': [-0.33445147, -0.2567135, 0.898754, 0.9402996, 0.5378065],
# 'color': 'grey_8510',
# 'id': 7},
# {'vector': [0.3952472, 0.40002573, -0.5890507, -0.86505026, -0.6140361],
# 'color': 'white_9381',
# 'id': 8},
# {'vector': [0.57182807, 0.24070318, -0.37379134, -0.067269325, -0.6980532],
# 'color': 'purple_4976',
# 'id': 9}]
# Query with a scalar filtering condition
res = client.query(
collection_name="test_collection",
filter="id in [6,7,8]",
)
print(res)
# [{'vector': [0.8371978, -0.015764369, -0.31062937, -0.56266695, -0.8984948],
# 'color': 'red_9392',
# 'id': 6},
# {'vector': [-0.33445147, -0.2567135, 0.898754, 0.9402996, 0.5378065],
# 'color': 'grey_8510',
# 'id': 7},
# {'vector': [0.3952472, 0.40002573, -0.5890507, -0.86505026, -0.6140361],
# 'color': 'white_9381',
# 'id': 8}]
# Query within a partition
res = client.query(
collection_name="test_collection",
filter="id in [6,7,8]",
partition_names=["partitionA"],
)
# []
# Query with specified output fields
res = client.query(
collection_name="test_collection",
filter="id in [6,7,8]",
output_fields=["id", "vector"],
)
print(res)
# [{'id': 6,
# 'vector': [0.8371978, -0.015764369, -0.31062937, -0.56266695, -0.8984948]},
# {'id': 7,
# 'vector': [-0.33445147, -0.2567135, 0.898754, 0.9402996, 0.5378065]},
# {'id': 8,
# 'vector': [0.3952472, 0.40002573, -0.5890507, -0.86505026, -0.6140361]}]
# Query with a customized consistency level
res = client.query(
collection_name="test_collection",
filter="",
limit=5,
consistency_level=3,
graceful_time=6
)
print(res)
# [{'color': 'pink_8682',
# 'id': 0,
# 'vector': [0.35803765, -0.6023496, 0.18414013, -0.26286206, 0.90294385]},
# {'color': 'red_7025',
# 'id': 1,
# 'vector': [0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295]},
# {'color': 'orange_6781',
# 'id': 2,
# 'vector': [0.43742132, -0.55975026, 0.6457888, 0.7894059, 0.20785794]},
# {'color': 'pink_9298',
# 'id': 3,
# 'vector': [0.3172005, 0.97190446, -0.36981148, -0.48608947, 0.9579189]},
# {'color': 'red_4794',
# 'id': 4,
# 'vector': [0.44523495, -0.8757027, 0.82207793, 0.4640629, 0.3033748]}]
# Query with outputting all fields
res = client.query(
collection_name="test_collection",
filter="id < 5",
output_fields=["*"]
)
# [{'vector': [0.35803765, -0.6023496, 0.18414013, -0.26286206, 0.90294385],
# 'color': 'pink_8682',
# 'id': 0},
# {'vector': [0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295],
# 'color': 'red_7025',
# 'id': 1},
# {'vector': [0.43742132, -0.55975026, 0.6457888, 0.7894059, 0.20785794],
# 'color': 'orange_6781',
# 'id': 2},
# {'vector': [0.3172005, 0.97190446, -0.36981148, -0.48608947, 0.9579189],
# 'color': 'pink_9298',
# 'id': 3},
# {'vector': [0.44523495, -0.8757027, 0.82207793, 0.4640629, 0.3033748],
# 'color': 'red_4794',
# 'id': 4}]
# Count the loaded entities that match specific conditions
res = client.query(
collection_name="test_collection",
filter="color like \"red_%\"",
output_fields=["count(*)"]
)
# [{'count(*)': 3}]