概述
向量检索(Vector Search)是Elasticsearch的高级功能,允许用户在高维向量空间中进行相似性搜索,超越了传统的关键词匹配方式。通过将文本、图像等数据转换为向量表示,基于向量之间的距离进行搜索,适合自然语言处理、推荐系统和计算机视觉等复杂场景。
天翼云云搜索服务开通的Elasticsearch 支持通过近似最近邻(ANN)搜索算法实现高效的向量索引结构,使得在处理大规模数据集时依然能保持高效的查询速度和准确性。
前提条件
- 已开通天翼云云搜索服务 Elasticsearch 集群。
- Elasticsearch 版本支持KNN向量检索功能(当前版本默认支持)。
- 本地环境已配置好API访问权限,且能够通过API与集群通信。
操作步骤
- 创建支持向量检索的索引,需要创建一个支持向量检索的索引。可以使用以下命令为一个包含向量字段的索引启用 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" : 654,
"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]
}
}
]
}
}
通过这些步骤,用户可以在Elasticsearch集群上实现基于向量的高效相似性搜索,支持从多维数据中快速找到最相似的结果,从而提升搜索体验和智能化水平。