조건부 쿼리 수행
이 항목은 SQL WHERE 조건과 유사한 조건부 쿼리의 수행 방법을 소개합니다.
벡터 유사도 검색과 달리 쿼리는 부울 표현식을 사용하여 스칼라 필드를 기반으로 벡터를 검색합니다. Milvus는 스칼라 필드 및 기본 키 필드에 다양한 데이터 유형과 부울 표현식을 지원합니다. 부울 표현식을 사용하여 스칼라 필드 또는 기본 키 필드를 필터링하고 필터 조건과 일치하는 모든 결과를 검색할 수 있습니다.
다음 예제는 책 ID(기본 키), 단어 수(스칼라 필드), 책 소개(벡터 필드)를 포함하는 2000개의 행이 포함된 데이터셋에 대한 쿼리를 실행하는 방법을 보여줍니다. 이는 특정 책을 ID를 기반으로 조회하는 시뮬레이션입니다.
컬렉션 로딩
Milvus에서 모든 검색 및 쿼리 작업은 메모리에서 수행됩니다. 쿼리를 수행하기 전에 컬렉션을 메모리에 로드해야 합니다.
err := milvusClient.LoadCollection(
context.Background(), // ctx
"book", // CollectionName
false // async
)
if err != nil {
log.Fatal("컬렉션을 로드하는 데 실패했습니다:", err.Error())
}
쿼리 실행
다음 예제는 특정 book_id
값을 기반으로 벡터를 필터링하고 결과의 book_id
및 book_intro
필드를 반환합니다.
Milvus는 쿼리에 대한 일관성 수준을 설정할 수 있습니다. 본 예제에서는 일관성 수준을 강한
으로 설정합니다. 바운디드
, 세션
, 또는 얼마든지
로 일관성 수준을 설정할 수도 있습니다. Milvus의 네 가지 일관성 수준에 대한 자세한 내용은 일관성을 참조하십시오.
필터 표현식과 쿼리 요청에 동적 필드를 사용하여 출력 필드를 설정할 수도 있습니다. 예를 들어 동적 패턴을 참조하십시오.
opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
option.Limit = 3
option.Offset = 0
option.ConsistencyLevel = entity.ClStrong
option.IgnoreGrowing = false
})
queryResult, err := milvusClient.Query(
context.Background(), // ctx
"book", // 컬렉션명
"", // 파티션명
entity.NewColumnInt64("book_id", []int64{2,4,6,8}), // expr
[]string{"book_id", "book_intro"}, // 출력 필드
opt, // 쿼리 옵션
)
if err != nil {
log.Fatal("컬렉션 쿼리에 실패했습니다:", err.Error())
}
매개변수 | 설명 | 옵션 |
---|---|---|
ctx |
API 호출 프로세스를 제어하는 데 사용되는 컨텍스트. | 없음 |
CollectionName |
쿼리할 컬렉션 이름 | 없음 |
partitionName |
로드할 파티션 이름. 비어 있으면 모든 파티션을 쿼리합니다. | 없음 |
expr |
속성을 필터링하는 데 사용되는 부울 표현식 | 자세한 내용은 부울 표현식 규칙을 참조하십시오. |
OutputFields |
반환할 필드 이름 | 현재 버전에서 벡터 필드는 지원되지 않습니다. |
opts |
entity.SearchQueryOptionFunc 형태로 표현된 쿼리 옵션 |
- Limit 은 반환할 엔터티 수를 나타냅니다. - Offset 은 검색 과정에서 건너뛸 엔터티 수를 나타냅니다. 이 매개변수와 Limit 의 합은 16384 보다 작아야 합니다. - ConsistencyLevel 은 검색 과정에서 적용할 일관성 수준을 나타냅니다. - Ignore Growing 은 유사도 검색 과정에서 성장 세그먼트를 무시할지 여부를 나타냅니다. 기본값은 False 이며, 검색에 성장 세그먼트가 포함됩니다. |
반환된 결과를 확인합니다.
fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
fmt.Println(qr.IDs)
}
엔터티 수 계산
쿼리를 실행할 때 output_fields
에 count(*)
를 덧붙이면 Milvus는 콜렉션 내 엔터티의 수를 반환할 수 있습니다. 특정 조건을 충족하는 엔터티의 수를 계산하려면 expr
을 사용하여 부울 표현식을 정의하십시오.
제한 사항
output_fields
에서 count(*)
를 사용할 때 limit
매개변수의 사용이 허용되지 않습니다.