概述
向量检索(Vector Search)是OpenSearch 的高级功能,它允许用户在高维向量空间中进行相似性搜索。这一功能不仅基于传统的关键词匹配,还支持通过向量表示的方式来处理更复杂的查询场景,例如自然语言处理、推荐系统和计算机视觉等。
天翼云云搜索服务开通的OpenSearch集群通过集成近似最近邻(ANN)搜索算法,确保在大规模数据集上实现高效、精准的向量检索,使用户可以快速找到与查询向量最相似的结果。
前提条件
- 已开通天翼云云搜索服务OpenSearch 集群。
- OpenSearch 版本支持KNN向量检索功能(当前版本默认支持)。
- 本地环境已配置好API访问权限,且能够通过 API 与集群通信。
操作步骤
- 创建支持向量检索的索引。在OpenSearch中,可以通过以下命令创建一个启用了KNN功能的索引,用于向量检索:
PUT my-knn-index-1
{
"settings": {
"index": {
"knn": true,
"knn.algo_param.ef_search": 100
}
},
"mappings": {
"properties": {
"category": {
"type": "keyword"
},
"brand": {
"type": "keyword"
},
"style": {
"type": "keyword"
},
"my_vector": {
"type": "knn_vector",
"dimension": 3
}
}
}
}
- knn: 设置为 true 以启用向量检索功能。
- dimension: 指定向量的维度,这里设置为 3。
- 插入向量数据。创建好索引后,可以通过以下命令插入具有向量字段的数据:
PUT my-knn-index-1/_doc/1
{
"category": "electronics",
"brand": "brandA",
"style": "modern",
"my_vector": [0.5, 0.8, 0.3]
}
PUT my-knn-index-1/_doc/2
{
"category": "furniture",
"brand": "brandB",
"style": "vintage",
"my_vector": [0.2, 0.4, 0.7]
}
PUT my-knn-index-1/_doc/3
{
"category": "clothing",
"brand": "brandC",
"style": "casual",
"my_vector": [0.9, 0.1, 0.6]
}
- 执行向量检索查询。数据插入完成后,可以通过向量进行检索。以下是一个查询示例,它将基于向量 [0.5, 0.8, 0.3] 进行KNN搜索,并返回最相似的2条记录:
POST my-knn-index-1/_search
{
"size": 10,
"query": {
"knn": {
"my_vector": {
"vector": [0.5, 0.8, 0.3],
"k": 2
}
}
}
}
- vector: 要进行相似性检索的向量值。
- k: 返回与查询向量最相似的k个结果,此例中为2。
- 查询返回结果示例。以下为检索后的返回结果,其中包含与查询向量最相似的数据文档及其相似度得分(_score):
{
"took" : 200,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "my-knn-index-1",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"category" : "electronics",
"brand" : "brandA",
"style" : "modern",
"my_vector" : [0.5, 0.8, 0.3]
}
},
{
"_index" : "my-knn-index-1",
"_id" : "2",
"_score" : 0.7092199,
"_source" : {
"category": "furniture",
"brand": "brandB",
"style": "vintage",
"my_vector": [0.2, 0.4, 0.7]
}
}
]
}
}
通过这些步骤,用户可以在OpenSearch集群中轻松实现基于向量的相似性搜索功能,支持高效处理海量数据并提升搜索体验。