조건부 쿼리 수행

이 항목은 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_idbook_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_fieldscount(*)를 덧붙이면 Milvus는 콜렉션 내 엔터티의 수를 반환할 수 있습니다. 특정 조건을 충족하는 엔터티의 수를 계산하려면 expr을 사용하여 부울 표현식을 정의하십시오.

제한 사항

output_fields에서 count(*)를 사용할 때 limit 매개변수의 사용이 허용되지 않습니다.