使用OpenSearch實例向量檢索功能增強搜索能力
更新時間 2024-11-26 11:25:24
最近更新時間: 2024-11-26 11:25:24
分享文章
本文為您介紹如何使用OpenSearch實例中的向量檢索能力,增強實例的搜索能力。
概述
向量檢索(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集群中輕松實現基于向量的相似性搜索功能,支持高效處理海量數據并提升搜索體驗。