使用Elasticsearch實例向量檢索功能增強搜索能力
更新時間 2024-11-26 11:25:22
最近更新時間: 2024-11-26 11:25:22
分享文章
本文為您介紹如何使用Elasticsearch實例中的向量檢索能力,增強實例的搜索能力。
概述
向量檢索(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集群上實現基于向量的高效相似性搜索,支持從多維數據中快速找到最相似的結果,從而提升搜索體驗和智能化水平。