为了让应用能够达到生产规模和性能,您需要创建集合索引。如果没有索引,ANN 搜索会很慢,因为它们会执行暴力扫描。创建索引后,可以非常快速地针对已编入索引的向量字段进行搜索。
选择距离指标
为索引选择合适的距离指标对于获得准确且相关的相似性搜索结果至关重要。最佳选择主要取决于向量嵌入的特征和数据的性质。最关键的规则是使用嵌入模型在训练时所用的距离指标。嵌入模型经过优化,可生成向量表示形式,其中相似性通过特定的距离计算方法得到最佳体现。使用其他指标可能会导致搜索结果欠佳或不正确。
查看嵌入模型的文档:这是确定预期距离指标的最可靠方法。
考虑您的使用情形:对于查找语义上相似的文本或图片,余弦相似度通常是最佳选择。如果向量的模所表示的“强度”很重要,请考虑使用 L2 距离。
分析向量:确定向量是否已标准化。 如果已进行标准化处理,您可以使用余弦相似度或点积,并获得相似的排名。
通过仔细考虑这些因素,您可以为索引选择最合适的距离指标,从而获得更准确、更有意义的相似性搜索结果。
创建 ANN 索引
您可以针对特定嵌入字段创建 ANN 索引。默认情况下,所有数据对象的字符串、数字和布尔值字段都会下推到索引,以实现内嵌过滤。
为了优化计算费用,您可以准确指定哪些字段应可过滤 (filter_fields),哪些字段应仅作为载荷存储 (store_fields)。
以下示例演示了如何在集合 movies 中创建索引 plot_index。
curl -X POST \ 'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/movies/indexes?indexId=plot_index' \
-H 'Bearer $(gcloud auth print-access-token)' \
-H 'Content-Type: application/json' \
-d '{ \
"index_field": "plot_embedding", \
"filter_fields": [ \
"year", \
"genre" \
], \
"store_fields": [ \
"title" \
] \
}'
在此示例中,请求指定 year 和 genre 可过滤(作为过滤字段传递给索引),而载荷字段 title 不可过滤。
获取索引
以下示例演示了如何获取存储在集合 movies 中的现有索引 plot_index。
curl -X GET \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/movies/indexes/plot_index' \
-H 'Bearer $(gcloud auth print-access-token)' \
-H 'Content-Type: application/json'
列出索引
以下示例演示了如何列出集合 movies 中的所有索引。
curl -X GET \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/movies/indexes' \
-H 'Bearer $(gcloud auth print-access-token)' \
-H 'Content-Type: application/json'
删除索引
以下示例演示了如何从集合 movies 中删除现有索引 plot_index。
curl -X DELETE \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/movies/indexes/plot_index' \
-H 'Bearer $(gcloud auth print-access-token)' \
-H 'Content-Type: application/json'