쿼리
Milvus는 ANN 검색 외에도 쿼리를 통한 메타데이터 필터링도 지원합니다. 이 페이지에서는 쿼리, 가져오기 및 쿼리이터레이터를 사용하여 엔티티를 검색하고, 메타데이터를 필터링하고, 쿼리 결과를 정렬하고, 스칼라 값을 집계하는 방법을 소개합니다.
컬렉션을 만든 후 새 필드를 동적으로 추가하는 경우 이러한 필드를 포함하는 쿼리는 정의된 기본값을 반환하거나 명시적으로 값을 설정하지 않은 엔티티의 경우 NULL을 반환합니다. 자세한 내용은 기존 컬렉션에 필드 추가하기를 참조하세요.
개요
컬렉션에는 다양한 유형의 스칼라 필드를 저장할 수 있습니다. 하나 이상의 스칼라 필드를 기반으로 Milvus가 엔티티를 필터링하도록 할 수 있습니다. Milvus는 세 가지 유형의 쿼리를 제공합니다: 쿼리, 가져오기, 쿼리이터레이터. 아래 표는 이 세 가지 쿼리 유형을 비교한 것입니다.
Get |
Query |
쿼리이터레이터 |
|
|---|---|---|---|
적용 가능한 시나리오 |
지정된 기본 키를 보유한 엔티티를 찾으려는 경우. |
사용자 지정 필터링 조건을 충족하는 모든 또는 지정된 수의 엔터티를 찾으려면 다음과 같이 하세요. |
페이지 매김 쿼리에서 사용자 지정 필터링 조건을 충족하는 모든 엔터티를 찾으려면. |
필터링 방법 |
기본 키 기준 |
표현식을 필터링합니다. |
표현식을 필터링합니다. |
필수 매개 변수 |
|
|
|
선택적 매개 변수 |
|
|
|
반환 항목 |
지정한 컬렉션 또는 파티션에서 지정한 기본 키를 보유한 엔터티를 반환합니다. |
지정한 컬렉션 또는 파티션에서 사용자 지정 필터링 조건을 충족하는 모든 또는 지정한 수의 엔터티를 반환합니다. |
페이지 매김 쿼리를 통해 지정된 컬렉션 또는 파티션에서 사용자 지정 필터링 조건을 충족하는 모든 엔터티를 반환합니다. |
메타데이터 필터링에 대한 자세한 내용은 부울 표현식 규칙을 참조하세요.
Get 사용
기본 키로 엔티티를 찾아야 하는 경우 Get 메서드를 사용할 수 있습니다. 다음 코드 예제에서는 컬렉션에 id, vector, color 이라는 이름의 필드 3개가 있다고 가정합니다.
[
{"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"},
]
다음과 같이 ID로 엔티티를 가져올 수 있습니다.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.get(
collection_name="my_collection",
ids=[0, 1, 2],
output_fields=["vector", "color"]
)
print(res)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.GetReq
import io.milvus.v2.service.vector.request.GetResp
import io.milvus.v2.service.vector.response.QueryResp;
import java.util.*;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.token("root:Milvus")
.build());
GetReq getReq = GetReq.builder()
.collectionName("my_collection")
.ids(Arrays.asList(0, 1, 2))
.outputFields(Arrays.asList("vector", "color"))
.build();
GetResp getResp = client.get(getReq);
List<QueryResp.QueryResult> results = getResp.getGetResults();
for (QueryResp.QueryResult result : results) {
System.out.println(result.getEntity());
}
// Output
// {color=pink_8682, vector=[0.35803765, -0.6023496, 0.18414013, -0.26286206, 0.90294385], id=0}
// {color=red_7025, vector=[0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295], id=1}
// {color=orange_6781, vector=[0.43742132, -0.55975026, 0.6457888, 0.7894059, 0.20785794], id=2}
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v2/column"
"github.com/milvus-io/milvus/client/v2/entity"
"github.com/milvus-io/milvus/client/v2/milvusclient"
)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
milvusAddr := "localhost:19530"
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: milvusAddr,
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
defer client.Close(ctx)
resultSet, err := client.Get(ctx, milvusclient.NewQueryOption("my_collection").
WithConsistencyLevel(entity.ClStrong).
WithIDs(column.NewColumnInt64("id", []int64{0, 1, 2})).
WithOutputFields("vector", "color"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
fmt.Println("id: ", resultSet.GetColumn("id").FieldData().GetScalars())
fmt.Println("vector: ", resultSet.GetColumn("vector").FieldData().GetVectors())
fmt.Println("color: ", resultSet.GetColumn("color").FieldData().GetScalars())
import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";
const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});
const res = client.get({
collection_name="my_collection",
ids=[0,1,2],
output_fields=["vector", "color"]
})
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/entities/get" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "my_collection",
"id": [0, 1, 2],
"outputFields": ["vector", "color"]
}'
# {"code":0,"cost":0,"data":[{"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]}]}
쿼리 사용
기본 쿼리
사용자 지정 필터링 조건으로 엔티티를 찾아야 하는 경우 쿼리 메서드를 사용합니다. 다음 코드 예제에서는 id, vector, color 라는 세 개의 필드가 있다고 가정하고 red 로 시작하는 color 값을 가진 지정된 수의 엔티티를 반환합니다.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.query(
collection_name="my_collection",
filter="color like \"red%\"",
output_fields=["vector", "color"],
limit=3
)
import io.milvus.v2.service.vector.request.QueryReq
import io.milvus.v2.service.vector.request.QueryResp
QueryReq queryReq = QueryReq.builder()
.collectionName("my_collection")
.filter("color like \"red%\"")
.outputFields(Arrays.asList("vector", "color"))
.limit(3)
.build();
QueryResp queryResp = client.query(queryReq);
List<QueryResp.QueryResult> results = queryResp.getQueryResults();
for (QueryResp.QueryResult result : results) {
System.out.println(result.getEntity());
}
// Output
// {color=red_7025, vector=[0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295], id=1}
// {color=red_4794, vector=[0.44523495, -0.8757027, 0.82207793, 0.4640629, 0.3033748], id=4}
// {color=red_9392, vector=[0.8371978, -0.015764369, -0.31062937, -0.56266695, -0.8984948], id=6}
resultSet, err := client.Query(ctx, milvusclient.NewQueryOption("my_collection").
WithFilter("color like \"red%\"").
WithOutputFields("vector", "color"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
fmt.Println("id: ", resultSet.GetColumn("id").FieldData().GetScalars())
fmt.Println("vector: ", resultSet.GetColumn("vector").FieldData().GetVectors())
fmt.Println("color: ", resultSet.GetColumn("color").FieldData().GetScalars())
import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";
const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});
const res = client.query({
collection_name="my_collection",
filter='color like "red%"',
output_fields=["vector", "color"],
limit(3)
})
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/entities/query" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "my_collection",
"filter": "color like \"red%\"",
"limit": 3,
"outputFields": ["vector", "color"]
}'
#{"code":0,"cost":0,"data":[{"color":"red_7025","id":1,"vector":[0.19886813,0.060235605,0.6976963,0.26144746,0.8387295]},{"color":"red_4794","id":4,"vector":[0.44523495,-0.8757027,0.82207793,0.4640629,0.3033748]},{"color":"red_9392","id":6,"vector":[0.8371978,-0.015764369,-0.31062937,-0.56266695,-0.8984948]}]}
쿼리 결과 정렬Compatible with Milvus 3.0.x
기본적으로 쿼리는 지정되지 않은 순서로 결과를 반환합니다. 하나 이상의 스칼라 필드를 기준으로 결과를 정렬하려면 order_by 매개변수를 사용합니다. order_by 를 사용하는 경우 주의하세요:
order_by는limit와 함께 사용해야 합니다.지원되는 필드 유형
INT8,INT16,INT32,INT64,FLOAT,DOUBLE,VARCHAR. 벡터,JSON, 또는ARRAY필드를 기준으로 정렬하는 것은 지원되지 않습니다.Null 가능 필드를 기준으로 정렬하는 경우 오름차순(NULLS LAST)의 경우 NULL 값이 끝에, 내림차순(NULLS FIRST)의 경우 처음에 배치됩니다.
기본 정렬
"field_name:direction" order_by 매개변수에 문자열 목록을 전달합니다. 여기서 은 (오름차순) 또는 (내림차순) 중 하나입니다. 및 은 대소문자를 구분합니다. direction asc desc asc desc
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
# Sort results by id in ascending order
res = client.query(
collection_name="my_collection",
filter="color like \"red%\"",
output_fields=["vector", "color"],
limit=3,
order_by=["id:asc"],
)
// java
// go
// nodejs
# restful
다중 필드 정렬
한 번에 여러 필드를 기준으로 정렬할 수 있습니다. 결과는 먼저 목록의 첫 번째 필드 순으로 정렬됩니다. 해당 필드에서 두 행의 값이 같으면 두 번째 필드에 따라 순서가 결정되는 식으로 정렬됩니다.
# Sort by rating descending, then by price ascending for ties
res = client.query(
collection_name="my_collection",
filter="",
output_fields=["color", "rating", "price"],
limit=10,
order_by=["rating:desc", "price:asc"],
)
// java
// go
// nodejs
# restful
정렬을 사용한 페이지 매기기
order_by 와 limit 및 offset 를 함께 사용하여 정렬된 결과를 페이지 매김합니다. 예를 들어 여러 페이지에 걸쳐 가격별로 정렬된 제품 목록을 표시하려면 각 페이지에 중복이나 공백 없이 올바른 가격 순서로 다음 항목 배치를 표시합니다.
# Page 1
page1 = client.query(
collection_name="my_collection",
filter="color like \"red%\"",
output_fields=["color", "price"],
limit=5,
offset=0,
order_by=["price:asc"],
)
# Page 2
page2 = client.query(
collection_name="my_collection",
filter="color like \"red%\"",
output_fields=["color", "price"],
limit=5,
offset=5,
order_by=["price:asc"],
)
// java
// go
// nodejs
# restful
쿼리 결과 집계Compatible with Milvus 3.0.x
하나 이상의 스칼라 필드를 기준으로 쿼리 결과를 그룹화하고 그룹별로 집계를 계산할 수 있습니다. 지원되는 집계 연산자는 count, min, max, sum, avg 입니다.
group_by_fields 을 사용하는 경우 주의하세요:
지원되는 필드 유형
group_by_fields:INT8,INT16,INT32,INT64,VARCHAR, 및TIMESTAMPTZ입니다.FLOAT,DOUBLE, 벡터,JSON, 또는ARRAY필드로 그룹화하면 오류가 반환됩니다.sum및avg은 숫자 필드만 지원합니다.FLOAT및DOUBLE을 포함한 숫자 필드에 적용할 수 있지만VARCHAR필드에 적용하면 오류가 반환됩니다.
집계를 사용하려면 group_by_fields 을 query() 으로 전달하고 집계 표현식 (count(*), count(<field>), min(<field>), max(<field>), sum(<field>), avg(<field>))을 output_fields 에 추가합니다.
다음 예제는 color 필드를 기준으로 엔티티를 그룹화하고 각 색상 그룹에 있는 엔티티의 수를 반환합니다:
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.query(
collection_name="my_collection",
filter="",
group_by_fields=["color"],
output_fields=["color", "count(*)"],
)
# [{'color': 'red', 'count(*)': 10},
# {'color': 'orange', 'count(*)': 10},
# {'color': 'yellow', 'count(*)': 10},
# {'color': 'green', 'count(*)': 10},
# {'color': 'blue', 'count(*)': 10}]
// java
// go
// nodejs
# restful
한 번의 호출로 여러 집계 표현식을 요청할 수 있습니다. 다음 예제는 color 으로 그룹화하고 각 그룹에 대한 엔티티 수, 평균 가격 및 최대 등급을 반환합니다:
res = client.query(
collection_name="my_collection",
filter="",
group_by_fields=["color"],
output_fields=["color", "count(*)", "avg(price)", "max(rating)"],
)
# [{'color': 'red', 'count(*)': 10, 'avg(price)': 65.22, 'max(rating)': 5},
# {'color': 'orange', 'count(*)': 10, 'avg(price)': 48.67, 'max(rating)': 5},
# {'color': 'yellow', 'count(*)': 10, 'avg(price)': 64.15, 'max(rating)': 3},
# {'color': 'green', 'count(*)': 10, 'avg(price)': 58.28, 'max(rating)': 5},
# {'color': 'blue', 'count(*)': 10, 'avg(price)': 50.20, 'max(rating)': 5}]
// java
// go
// nodejs
# restful
복합 그룹을 계산하려면 group_by_fields 에 둘 이상의 필드를 전달합니다. 다음 예제는 (color, rating) 으로 그룹화하고 각 그룹의 가격 범위를 계산합니다:
res = client.query(
collection_name="my_collection",
filter="",
group_by_fields=["color", "rating"],
output_fields=["color", "rating", "min(price)", "max(price)"],
)
# [{'color': 'red', 'rating': 5, 'min(price)': 34.51, 'max(price)': 70.90},
# {'color': 'orange', 'rating': 2, 'min(price)': 12.39, 'max(price)': 81.99},
# {'color': 'yellow', 'rating': 2, 'min(price)': 22.62, 'max(price)': 88.24},
# {'color': 'green', 'rating': 1, 'min(price)': 18.35, 'max(price)': 59.53},
# {'color': 'blue', 'rating': 4, 'min(price)': 21.23, 'max(price)': 82.45},
# ...]
// java
// go
// nodejs
# restful
group_by_fields 와 limit 을 결합하여 돌아오는 그룹 수를 제한할 수도 있습니다. 이 방법은 필드의 카디널리티가 높고 그룹 샘플만 필요한 경우에 유용합니다:
res = client.query(
collection_name="my_collection",
filter="",
group_by_fields=["color"],
output_fields=["color", "avg(price)", "count(*)"],
limit=5,
)
# [{'color': 'red', 'avg(price)': 65.22, 'count(*)': 10},
# {'color': 'orange', 'avg(price)': 48.67, 'count(*)': 10},
# {'color': 'yellow', 'avg(price)': 64.15, 'count(*)': 10},
# {'color': 'green', 'avg(price)': 58.28, 'count(*)': 10},
# {'color': 'blue', 'avg(price)': 50.20, 'count(*)': 10}]
// java
// go
// nodejs
# restful
쿼리 이터레이터 사용
페이지 매김 쿼리를 통해 사용자 지정 필터링 조건으로 엔티티를 찾아야 하는 경우 QueryIterator를 만들고 그 다음() 메서드를 사용하여 모든 엔티티를 반복하여 필터링 조건을 충족하는 엔티티를 찾습니다. 다음 코드 예제에서는 id, vector, color 라는 세 개의 필드가 있고 red 로 시작하는 color 값을 가진 모든 엔티티를 반환한다고 가정합니다.
iterator = client.query_iterator(
"my_collection",
batch_size=10,
filter="color like \"red%\"",
output_fields=["color"]
)
results = []
while True:
result = iterator.next()
if not result:
iterator.close()
break
print(result)
results += result
import io.milvus.orm.iterator.QueryIterator;
import io.milvus.response.QueryResultsWrapper;
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.QueryIteratorReq;
QueryIteratorReq req = QueryIteratorReq.builder()
.collectionName("my_collection")
.expr("color like \"red%\"")
.batchSize(10L)
.outputFields(Collections.singletonList("color"))
.build();
QueryIterator queryIterator = client.queryIterator(req);
while (true) {
List<QueryResultsWrapper.RowRecord> res = queryIterator.next();
if (res.isEmpty()) {
queryIterator.close();
break;
}
for (QueryResultsWrapper.RowRecord record : res) {
System.out.println(record);
}
}
// Output
// [color:red_7025, id:1]
// [color:red_4794, id:4]
// [color:red_9392, id:6]
// go
import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";
const iterator = await milvusClient.queryIterator({
collection_name: 'my_collection',
batchSize: 10,
expr: 'color like "red%"',
output_fields: ['color'],
});
const results = [];
for await (const value of iterator) {
results.push(...value);
page += 1;
}
# Not available
파티션 내 쿼리
Get, Query 또는 QueryIterator 요청에 파티션 이름을 포함하여 하나 또는 여러 파티션 내에서 쿼리를 수행할 수도 있습니다. 다음 코드 예제에서는 컬렉션에 PartitionA라는 이름의 파티션이 있다고 가정합니다.
res = client.get(
collection_name="my_collection",
partitionNames=["partitionA"],
ids=[10, 11, 12],
output_fields=["vector", "color"]
)
res = client.query(
collection_name="my_collection",
partitionNames=["partitionA"],
filter="color like \"red%\"",
output_fields=["vector", "color"],
limit=3
)
# Use QueryIterator
iterator = client.query_iterator(
"my_collection",
partition_names=["partitionA"],
batch_size=10,
filter="color like \"red%\"",
output_fields=["color"]
)
results = []
while True:
result = iterator.next()
if not result:
iterator.close()
break
print(result)
results += result
GetReq getReq = GetReq.builder()
.collectionName("my_collection")
.partitionName("partitionA")
.ids(Arrays.asList(10, 11, 12))
.outputFields(Collections.singletonList("color"))
.build();
GetResp getResp = client.get(getReq);
QueryReq queryReq = QueryReq.builder()
.collectionName("my_collection")
.partitionNames(Collections.singletonList("partitionA"))
.filter("color like \"red%\"")
.outputFields(Collections.singletonList("color"))
.limit(3)
.build();
QueryResp getResp = client.query(queryReq);
QueryIteratorReq req = QueryIteratorReq.builder()
.collectionName("my_collection")
.partitionNames(Collections.singletonList("partitionA"))
.expr("color like \"red%\"")
.batchSize(50L)
.outputFields(Collections.singletonList("color"))
.consistencyLevel(ConsistencyLevel.BOUNDED)
.build();
QueryIterator queryIterator = client.queryIterator(req);
resultSet, err := client.Get(ctx, milvusclient.NewQueryOption("my_collection").
WithPartitions("partitionA").
WithIDs(column.NewColumnInt64("id", []int64{10, 11, 12})).
WithOutputFields("vector", "color"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
fmt.Println("id: ", resultSet.GetColumn("id").FieldData().GetScalars())
fmt.Println("vector: ", resultSet.GetColumn("vector").FieldData().GetVectors())
fmt.Println("color: ", resultSet.GetColumn("color").FieldData().GetScalars())
resultSet, err := client.Query(ctx, milvusclient.NewQueryOption("my_collection").
WithPartitions("partitionA").
WithFilter("color like \"red%\"").
WithOutputFields("vector", "color"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
fmt.Println("id: ", resultSet.GetColumn("id").FieldData().GetScalars())
fmt.Println("vector: ", resultSet.GetColumn("vector").FieldData().GetVectors())
fmt.Println("color: ", resultSet.GetColumn("color").FieldData().GetScalars())
// Use get
var res = client.get({
collection_name="my_collection",
partition_names=["partitionA"],
ids=[10,11,12],
output_fields=["vector", "color"]
})
// Use query
res = client.query({
collection_name="my_collection",
partition_names=["partitionA"],
filter="color like \"red%\"",
output_fields=["vector", "color"],
limit(3)
})
// Use queryiterator
const iterator = await milvusClient.queryIterator({
collection_name: 'my_collection',
partition_names: ['partitionA'],
batchSize: 10,
expr: 'color like "red%"',
output_fields: ['vector', 'color'],
});
const results = [];
for await (const value of iterator) {
results.push(...value);
page += 1;
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
# Use get
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/entities/get" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "my_collection",
"partitionNames": ["partitionA"],
"id": [10, 11, 12],
"outputFields": ["vector", "color"]
}'
# Use query
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/entities/get" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "my_collection",
"partitionNames": ["partitionA"],
"filter": "color like \"red%\"",
"limit": 3,
"outputFields": ["vector", "color"],
"id": [0, 1, 2]
}'
쿼리를 사용한 무작위 샘플링
데이터 탐색 또는 개발 테스트를 위해 컬렉션에서 데이터의 대표 하위 집합을 추출하려면 RANDOM_SAMPLE(sampling_factor) 표현식을 사용하세요. 여기서 sampling_factor 은 샘플할 데이터의 백분율을 나타내는 0에서 1 사이의 실수입니다.
자세한 사용법, 고급 예제 및 모범 사례는 무작위 샘플링을 참조하세요.
# Sample 1% of the entire collection
res = client.query(
collection_name="my_collection",
filter="RANDOM_SAMPLE(0.01)",
output_fields=["vector", "color"]
)
print(f"Sampled {len(res)} entities from collection")
# Combine with other filters - first filter, then sample
res = client.query(
collection_name="my_collection",
filter="color like \"red%\" AND RANDOM_SAMPLE(0.005)",
output_fields=["vector", "color"],
limit=10
)
print(f"Found {len(res)} red items in sample")
import io.milvus.v2.service.vector.request.GetReq
import io.milvus.v2.service.vector.request.GetResp
import io.milvus.v2.service.vector.request.QueryReq
import io.milvus.v2.service.vector.request.QueryResp
import java.util.*;
QueryReq queryReq = QueryReq.builder()
.collectionName("my_collection")
.filter("RANDOM_SAMPLE(0.01)")
.outputFields(Arrays.asList("vector", "color"))
.build();
QueryResp getResp = client.query(queryReq);
for (QueryResp.QueryResult result : getResp.getQueryResults()) {
System.out.println(result.getEntity());
}
queryReq = QueryReq.builder()
.collectionName("my_collection")
.filter("color like \"red%\" AND RANDOM_SAMPLE(0.005)")
.outputFields(Arrays.asList("vector", "color"))
.limit(10)
.build();
getResp = client.query(queryReq);
for (QueryResp.QueryResult result : getResp.getQueryResults()) {
System.out.println(result.getEntity());
}
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v2/column"
"github.com/milvus-io/milvus/client/v2/entity"
"github.com/milvus-io/milvus/client/v2/milvusclient"
)
resultSet, err := client.Query(ctx, milvusclient.NewQueryOption("my_collection").
WithFilter("RANDOM_SAMPLE(0.01)").
WithOutputFields("vector", "color"))
if err != nil {
return err
}
resultSet, err = client.Query(ctx, milvusclient.NewQueryOption("my_collection").
WithFilter("color like \"red%\" AND RANDOM_SAMPLE(0.005)").
WithLimit(10).
WithOutputFields("vector", "color"))
if err != nil {
return err
}
// node
# restful
쿼리의 임시 시간대 설정하기
컬렉션에 TIMESTAMPTZ 필드가 있는 경우 쿼리 호출에서 timezone 매개변수를 설정하여 단일 작업에 대해 데이터베이스 또는 컬렉션 기본 시간대를 일시적으로 재정의할 수 있습니다. 이렇게 하면 작업 중에 TIMESTAMPTZ 값이 표시되고 비교되는 방식이 제어됩니다.
timezone 값은 유효한 IANA 표준 시간대 식별자 (예: 아시아/상하이, 미국/시카고 또는 UTC)여야 합니다. TIMESTAMPTZ 필드 사용 방법에 대한 자세한 내용은 TIMESTAMPTZ 필드를 참조하세요.
아래 예는 쿼리 작업을 위해 임시로 시간대를 설정하는 방법을 보여줍니다:
# Query data and display the tsz field converted to "America/Havana"
results = client.query(
"my_collection",
filter="id <= 10",
output_fields=["id", "tsz", "vec"],
limit=2,
timezone="America/Havana",
)
// java
// js
// go
# restful