조건부 쿼리
이 주제에서는 조건부 쿼리를 수행하는 방법을 소개합니다.
벡터의 유사성 검색과 달리 조건부 쿼리는 부울 표현식을 통해 스칼라 필터를 사용하여 벡터를 검색합니다. Milvus는 스칼라 필드 및 다양한 부울 표현식에 대한 쿼리를 지원합니다. 부울 표현식은 스칼라 필드 또는 기본 키 필드를 필터링하는 데 사용될 수 있으며 필터링 조건과 일치하는 모든 결과를 검색합니다.
다음 예제는 책 2000행의 데이터셋을 쿼리하는 방법을 보여줍니다. 이 데이터셋에는 책 ID(기본 키), 단어 수(스칼라 필드) 및 책 소개(벡터 필드)가 포함되어 있으며, 책 ID를 기반으로 특정 책을 쿼리하는 시나리오를 시뮬레이션합니다.
컬렉션 로드
쿼리를 수행하기 전에 컬렉션을 메모리에 로드해야 합니다.
from pymilvus import Collection
collection = Collection("book") # 기존 컬렉션을 가져옵니다.
collection.load()
쿼리 실행
다음 예제는 특정 book_id
값 기반의 필터링된 벡터를 반환하고 결과에서 book_id
필드와 book_intro
필드를 반환합니다.
Milvus는 쿼리를 위한 일관성 수준 설정을 지원합니다. 이 주제의 예제는 일관성 수준을 강함
으로 설정합니다. 또한 제한된
, 세션
, 또는 최종적으로
일관성 수준으로 설정할 수 있습니다. Milvus의 네 가지 일관성 수준에 대한 자세한 내용은 일관성을 참조하세요.
필터 표현식에서 동적 필드를 사용하고 쿼리 요청에서 출력 필드를 지정할 수도 있습니다. 예를 들어 동적 스키마를 참조하세요.
res = collection.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
매개변수 | 설명 |
---|---|
expr |
속성을 필터링하는 데 사용되는 부울 표현식입니다. 부울 표현식 규칙에 대한 자세한 내용은 부울 표현식 규칙을 참조하세요. |
limit |
반환할 가장 유사한 결과의 수입니다. 이 값과 offset 의 합은 16384보다 작아야 합니다. |
offset |
컬렉션에서 건너뛸 결과의 수입니다. limit 이 지정된 경우에만 사용 가능하며, 이 값과 limit 의 합은 16384보다 작아야 합니다. 예를 들어, 벡터의 9번째와 10번째 최근 이웃을 쿼리하려면 limit 을 2 로 설정하고 offset 을 8 로 설정합니다. |
output_fields (선택 사항) |
반환할 필드 이름의 목록입니다. |
partition_names (선택 사항) |
쿼리할 파티션 이름의 목록입니다. |
consistency_level (선택 사항) |
쿼리에 대한 일관성 수준입니다. |
결과를 확인하세요.
sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res
엔티티 수 세기
쿼리를 수행할 때 count(*)
를 output_fields
에 추가하여 Milvus가 컬렉션에 있는 엔티티의 수를 반환할 수 있습니다. 특정 조건을 충족하는 엔티티 수를 세고 싶다면 expr
을 사용하여 부울 표현식을 정의하세요.
컬렉션에 있는 모든 엔티티를 세기:
res = collection.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
특정 필터링 조건을 충족하는 엔티티 수를 세기:
res = collection.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
제한 사항
output_fields
에서 count(*)
을 사용할 때 limit
매개변수의 사용이 금지됩니다.