기본 키 검색Compatible with Milvus 2.6.9+
유사도 검색을 수행할 때는 쿼리 벡터가 대상 컬렉션에 이미 존재하더라도 항상 하나 이상의 쿼리 벡터를 제공하라는 메시지가 표시됩니다. 검색 전에 벡터를 검색하지 않으려면 대신 기본 키를 사용할 수 있습니다.
개요
이커머스 플랫폼에서 사용자는 키워드를 입력하여 해당 키워드와 일치하는 제품을 검색할 수 있습니다. 사용자가 제품 상세 페이지를 보면 플랫폼은 비교를 원하는 사용자를 위해 페이지 하단에 유사한 제품 목록도 표시합니다.
추천은 키워드 또는 현재 제품과의 유사성을 기준으로 정렬됩니다. 이를 위해 플랫폼 개발자는 실제 유사도 검색 전에 Milvus에서 키워드 또는 현재 제품의 벡터 표현을 검색해야 하며, 이로 인해 플랫폼과 Milvus 간의 왕복 횟수가 증가하고 네트워크를 통해 많은 수의 고차원 플로트가 전송됩니다.
애플리케이션과 Milvus 간의 상호 작용 로직을 단순화하고, 왕복 횟수를 줄이며, 네트워크를 통해 대량의 고차원 부동 소수점 값이 전송되는 것을 방지하려면 기본 키 검색을 사용하는 것을 고려하세요.
기본 키 검색에서는 쿼리 벡터를 제공할 필요가 없습니다. 대신 쿼리 벡터가 포함된 엔티티의 기본 키(ids)를 제공해야 합니다.
제한 및 제한 사항
기본 키를 사용한 검색은 BM25 함수에서와 같이 VarChar 필드에서 파생된 스파스 벡터 필드를 제외한 모든 벡터 데이터 유형에 적용됩니다.
필터링, 범위 및 그룹화 검색에서 쿼리 벡터 대신 기본 키를 사용할 수 있으며, 선택적으로 페이지 매김이 활성화된 상태에서 사용할 수 있습니다. 그러나 이 기능은 하이브리드 검색 및 검색 반복기에는 적용되지 않습니다.
임베딩 목록이 포함된 유사도 검색의 경우 쿼리 벡터를 검색하고 임베딩 목록으로 정렬한 다음 검색을 실행해야 합니다.
RESTful API에서는 쿼리 벡터 대신 기본 키를 사용할 수 없습니다.
존재하지 않는 기본 키 또는 잘못된 형식의 기본 키의 경우 Milvus에서 오류 메시지를 표시합니다.
기본 키와 쿼리 벡터는 상호 배타적입니다. 둘 다 제공해도 오류가 발생합니다.
예제
다음 예제에서는 제공된 모든 Int64 ID를 대상 컬렉션에서 사용할 수 있다고 가정합니다.
기본 키는 필터링에는 사용되지 않으며 벡터 검색에만 사용됩니다.
예 1: 기본 기본 키 검색
기본 기본 키 검색을 수행하려면 쿼리 벡터를 기본 키로 바꾸기만 하면 됩니다.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.search(
collection_name="quick_setup",
anns_field="vector",
ids=[551, 296, 43], # a list of primary keys
limit=3,
search_params={"metric_type": "IP"}
)
for hits in res:
for hit in hits:
print(hit)
// java
// node.js
// go
# restful
예제 2: 기본 키를 사용한 필터링된 검색
다음 예에서는 대상 컬렉션에 색상과 좋아요가 스키마로 정의된 두 개의 필드라고 가정합니다.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43], #
filter='color like "red%" and likes > 50',
output_fields=["color", "likes"],
limit=3,
)
// java
// node.js
// go
# restful
예 3: 기본 키를 사용한 범위 검색
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
search_params={
"params": {
"radius": 0.4,
"range_filter": 0.6
}
}
)
// java
// node.js
// go
# restful
예 4: 기본 키를 사용한 그룹 검색
다음 예에서는 docId 이 대상 컬렉션의 스키마 정의 필드라고 가정합니다.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
group_by_field="docId",
output_fields=["docId"]
)
// java
// node.js
// go
# restful