Search API 的用途是找出與指定查詢類似的資料物件,並傳回依相似度排序的結果清單。Search API 也支援篩選功能。
Search API 提供多種搜尋資料物件的方式:向量搜尋、全文搜尋和語意搜尋。此外,您也可以組合多個任何類型的搜尋,達成混合搜尋。
向量搜尋
向量搜尋可讓您提供自己的查詢向量。這是搜尋沒有 embedding-config 的嵌入欄位的必要方法。如果提供多個 search_vector 欄位,系統會使用相同權重合併結果。
以下範例示範如何對 ID 為 COLLECTION_ID 的 Collection 執行向量搜尋。
REST
curl -X POST \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H 'Content-Type: application/json' \
-d '{
"vector_search": {
"search_field": "plot_embedding",
"vector": {
"values": [
0.42426406871192845,
0.565685424949238,
0.7071067811865475
]
},
"filter": {
"genre": {
"$eq": "Thriller"
}
},
"top_k": 5,
"output_fields": {
"data_fields": "*",
"vector_fields": "*",
"metadata_fields": "*"
}
}
}'
Python
from google.cloud import vectorsearch_v1beta
# Create the client
data_object_search_service_client = vectorsearch_v1beta.DataObjectSearchServiceClient()
# Initialize request
vector_search = vectorsearch_v1beta.VectorSearch(
search_field="plot_embedding",
vector={"values": [0.1, 0.2, 0.3]},
filter={"genre": {"$eq": "Thriller"}},
top_k=5,
)
request = vectorsearch_v1beta.SearchDataObjectsRequest(
parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
vector_search=vector_search,
)
# Make the request
response = data_object_search_service_client.search_data_objects(request=request)
# Handle the response
print(response)
文字搜尋
這會執行全文搜尋,但不使用稀疏向量。預設的「字詞」查詢方言會將整個輸入內容視為個別搜尋字詞,並使用隱含的 AND 運算子。您可以將 enhanced_query 設為 true,藉此擴展搜尋字詞、處理詞幹、移除停用字詞,以及使用其他搜尋運算子:
OR:區分大小寫的析取運算子,可比對包含至少一個指定字詞的文件。這項功能只適用於兩個相鄰的字詞。":(雙引號) 用於搜尋詞組。-:否定運算子。系統會排除含有該字詞的文件。
語意搜尋
這項搜尋功能會將文字查詢轉換為嵌入,並根據語意意義找出結果。這項功能會使用結構定義中定義的 embedding-config 生成查詢嵌入。如果提供多個 search_vector 欄位,系統會使用相同權重合併結果。
使用混合型搜尋功能搜尋
使用 batch_search_data_objects 平行執行多項搜尋 (向量搜尋、文字搜尋和語意搜尋),並視需要使用 Ranker 合併結果並排序。
可用的排序器如下:
ReciprocalRankFusion:使用倒數排名融合 (RFF) 演算法合併結果集。VertexRanker:使用 Vertex Ranking API 合併結果並排序。