全部產品
Search
文件中心

Elasticsearch:Elasticsearch向量引擎使用指南

更新時間:Feb 13, 2026

Elasticsearch向量引擎功能,用於處理大規模的向量資料。它結合了Elasticsearch的強大搜尋功能和向量相似性計算能力,適用於推薦系統、映像檢索、自然語言處理等情境。本文將介紹如何高效地使用Elasticsearch向量引擎,並為您提供一些最佳實務建議。Elasticsearch的向量引擎正在不斷迭代,因此建議使用最新版本的Elasticsearch,以確保在效能、成本和使用者體驗方面獲得最佳效果。

前提條件

已建立ES執行個體,如您未建立執行個體,請參見初級版:從執行個體建立到資料檢索(建立阿里雲ES 8.x的最新版本)。

說明

向量引擎需要大量堆外記憶體cache向量索引。在選擇規格時,可依據下文關於記憶體計算的說明,評估堆外記憶體的使用方式,從而選擇合適的資料節點規格及其數量。

操作指引

1.建立索引

建立一個適合儲存向量資料的索引是首要步驟。以下是一個樣本索引定義:

PUT /my_vector_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "my_vector": {
        "type": "dense_vector",
        "dims": 3
      },
      "my_text" : {
        "type" : "keyword"
      }
    }
  }
}
重要
  • number_of_shardsnumber_of_replicas 的設定取決於您的資料規模和效能需求。

  • dense_vector 類型用於儲存向量資料,dims 參數指定了向量的維度。

  • dense_vector的參數很多,具體請參見Dense vector field type

2.資料匯入

您可以使用多種方式將資料匯入到Elasticsearch向量索引中,例如使用Bulk API大量匯入資料。以下是一個樣本:

PUT my_vector_index/_doc/1
{
  "my_text" : "text1",
  "my_vector" : [0.5, 10, 6]
}

PUT my_vector_index/_doc/2
{
  "my_text" : "text2",
  "my_vector" : [-0.5, 10, 10]
}
重要

請確保向量資料的維度與索引定義中的維度一致。

3.向量搜尋

使用Elasticsearch的向量相似性搜尋功能,可以通過指定查詢向量來尋找最相似的文檔。以下是一個樣本查詢:

GET my_vector_index/_search
{
  "knn": {
    "field": "my_vector",
    "query_vector": [-5, 9, -12],
    "k": 10,
    "num_candidates": 100
  },
  "fields": [ "my_text" ]
}

參數

內容

k

(可選)表示返回的最近鄰居的數量。該值必須小於或等於 num_candidates。預設情況下,該值與 size 的大小相等。

num_candidates

(可選)每個分區需考慮的最近鄰居候選數量。該參數對效能和召回率具有顯著影響,num_candidates 越大,召回率越高,但效能影響也隨之增大。該值應大於 k 或其大小(如果 k 被省略),且不得超過 10,000。Elasticsearch 從每個分區收集 num_candidates 個結果,並將其合并以尋找前 k 個結果。增加 num_candidates 往往會提升最終 k 結果的準確性。預設值為 Math.min(1.5 * k, 10,000)。

說明

關於knum_candidates參數的說明:num_candidates在HNSW中指的是查詢的ef值,它表示在分區中收集的最臨近的num_candidates個文檔,而k則是Elasticsearch最終在結果中返回的doc數量。

更多向量搜尋的功能包括:

  • knn可以支援filter查詢。可以支援similarity,設定最小score的命中doc。可以支援nested欄位。

  • 支援同時查詢多個knn欄位。

  • 支援使用script進行精確knn查詢。

  • 支援使用script進行rescore

  • 完整功能請參見k-nearest neighbor (knn) search