ES 在處理複雜彙總查詢、高基數詞條查詢、向量檢索等情境時可能面臨效能瓶頸。FalconSeek 雲原生核心基於阿里巴巴自研的 Havenask 引擎,通過 C++ 列式記憶體與全非同步架構,在完全相容 ES 生態的同時顯著提升查詢效能。本文檔介紹如何啟用FalconSeek實現預設查詢加速,涵蓋執行個體建立、索引/欄位級配置、查詢策略管理,並針對向量檢索等效能敏感情境提供最佳化實踐。
適用範圍
邀測免費使用:FalconSeek當前處於限量免費測試階段,請聯絡支援人員申請白名單開通使用許可權。
版本限制:當前功能強依賴於 Elasticsearch 8.17.0 版本,無法升級或降級。
執行個體限制:僅支援為新購買的向量增強版執行個體開啟 FalconSeek 功能,存量執行個體暫不支援。
建立執行個體並開啟 FalconSeek
FalconSeek 功能僅支援在建立新執行個體時開啟,您需要按照以下步驟完成配置。
在執行個體購買頁面,開啟 FalconSeek 功能。
執行個體類型:必須選擇向量增強版。
執行個體類型:必須選擇8.17.0(向量情境首推)。
進階增強功能:勾選FalconSeek 雲原生核心。
根據您的業務需求設定其他參數如專用網路、執行個體規格等,然後完成支付流程。
待執行個體建立成功後,您可以通過 Kibana 控制台執行以下命令,確認FalconSeek功能是否已在叢集層級成功開啟。
GET _cluster/settings?include_defaults&filter_path=defaults.havenask.engine.enabled如果返回結果中的
enabled欄位為true,則表示功能已成功開啟。{ "defaults": { "havenask": { "engine": { "enabled": "true" } } } }
索引中使用FalconSeek
執行個體開啟 FalconSeek 功能後,預設不會對任何索引生效。您需要通過索引設定(Index Settings),為希望加速的特定索引顯式啟用 FalconSeek 引擎。
為新索引啟用FalconSeek
在建立索引時,在
settings中添加參數"index.havenask.engine.enabled": true,啟用FalconSeek。PUT falcon_seek_test { "settings": { "index.havenask.engine.enabled": true // 開啟FalconSeek功能 }, "mappings": { "properties": { "foo": { "type": "keyword" } } } }寫入資料
POST falcon_seek_test/_bulk {"index":{}} {"foo":"hello"} {"index":{}} {"foo":"world"} {"index":{}} {"foo":"cpp"} {"index":{}} {"foo":"java"}查詢資料,預設使用FalconSeek。
GET falcon_seek_test/_search { "query": { "term":{ "foo":{ "value": "hello" } } }, "sort": [ { "_doc": { "order": "desc" } } ] }
為已有索引啟用FalconSeek
以下命令僅建立索引,未開啟加速。
PUT my_existing_index { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "properties": { "foo": { "type": "keyword" } } } }使用
_settingsAPI 更新索引配置,即可動態開啟。PUT my_existing_index/_settings { "index.havenask.engine.enabled": true }該情境下若要生效FalconSeek,需要先執行
POST /my_existing_index/_close關閉索引,再執行POST /my_existing_index/_open重新開啟索引。
管理查詢執行策略
FalconSeek 提供了靈活的查詢執行策略,允許您在索引層級或單次查詢層級中控制請求是由 FalconSeek 處理還是回退至 Elasticsearch 原生引擎。您可以通過 index.havenask.engine.search.type(索引層級)或 havenask_search_type(查詢層級)參數進行設定,查詢層級的參數優先順序更高。
策略 | 描述 | 推薦情境 |
| 查詢優先由 FalconSeek 執行。如果遇到不支援的文法或功能,請求會自動回退到 Elasticsearch 原生引擎執行。 | 兼顧效能與相容性的通用生產環境。 |
| 查詢強制由 Elasticsearch 原生引擎執行。 | 需要進行效能對比或繞過 FalconSeek 的未知問題時。 |
| 查詢強制由 FalconSeek 引擎執行。如果遇到不支援的文法或功能,系統將直接拋出異常,不會回退。 | 調試情境。 |
在索引層級設定預設查詢策略
以下樣本將 my_index 上的所有查詢預設都設定為使用 Elasticsearch 原生引擎執行。
PUT my_index/_settings
{
"index.havenask.engine.search.type": "es"
}在查詢時臨時覆蓋預設策略
假設 my_index 預設使用 native 策略,但您希望某一次特定查詢強制使用 Elasticsearch 原生引擎,可以在查詢請求中添加 havenask_search_type 參數。
方式一:作為 URL 參數
GET my_index/_search?havenask_search_type=es { "query": { "match_all": {} } }方式二:作為請求體(Request Body)參數
GET my_index/_search { "query": { "match_all": {} }, "havenask_search_type": "es" }
使用 FalconSeek 加速向量檢索
FalconSeek在ES原有索引結構之上,增加了基於C++的向量引擎全新索引,FalconSeek向量索引是阿里巴巴自主研發,支援了阿里巴巴集團內淘寶、天貓搜尋、推薦、拍立淘等集團內的主要業務,您可以利用 FalconSeek 核心整合的高效能向量索引,構建高效的以圖搜圖、語義搜尋等 AI 應用。
建立向量索引,在
mappings中定義一個dense_vector類型的欄位mage_vector儲存映像/文本的向量,並確保已為該索引開啟 FalconSeek。PUT vector_index { "settings": { "index.havenask.engine.enabled": true }, "mappings": { "properties": { "image_vector": { "type": "dense_vector", "dims": 128 , "index_options": { "type": "havenask_native" } }, "title": { "type": "keyword" } } } }寫入向量資料,使用
_bulk或_indexAPI 寫入文檔,其中向量欄位的值為一個浮點數數組。POST vector_index/_bulk {"index":{"_id":"1"}} {"image_vector":[0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28, -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21, 0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30, -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23, 0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08, 0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30, -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18, 0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05, 0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25, -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12, 0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06, 0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22],"title":"Image One"} {"index":{"_id":"2"}} {"image_vector":[0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28, -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21, 0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30, -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23, 0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08, 0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30, -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18, 0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05, 0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25, -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12, 0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06, 0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22],"title":"Image Two"}執行 k-NN 向量檢索,使用
knn查詢子句尋找與給定向量最相似的 Top K 個結果。GET vector_index/_search { "knn": { "field": "image_vector", "query_vector": [0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28, -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21, 0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30, -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23, 0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08, 0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30, -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18, 0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05, 0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25, -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12, 0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06, 0.09, 0.23, -0.07, 0.01, 0.17, -0.11, -0.08,-0.22], "k": 10, "num_candidates": 100 }, "fields": ["title"] }
更多FalconSeek向量索引使用請參見FalconSeek向量索引使用指南。
工作原理
FalconSeek 雲原生核心通過深度最佳化的 C++ 引擎替換了 Elasticsearch 底層的部分 Lucene 組件。當您發起一個查詢請求時,請求會先到達 FalconSeek 外掛程式層。外掛程式層會判斷該查詢是否能被 FalconSeek 引擎高效處理:
支援的查詢:請求將被轉寄至高效能的 FalconSeek 引擎執行。
不支援的查詢:系統會根據您設定的策略,自動將查詢回退至 Elasticsearch 原生引擎執行,或直接返回異常。
這種機制在保證高效能的同時,也確保了功能的相容性和穩定性。
常見問題
Q:我可以在已有的 Elasticsearch 執行個體上開啟 FalconSeek 功能嗎?
A:不可以。目前 FalconSeek 功能僅支援在新購執行個體時開啟。對於存量執行個體,如果您希望使用該功能,建議您建立一個符合要求的新執行個體,並使用阿里雲Data Transmission Service(DTS)或 Logstash 等工具將資料移轉至新執行個體。
Q:如果我執行了一個 FalconSeek 不支援的查詢會發生什嗎?
A:這取決於您的查詢執行策略。在預設的 native 模式下,查詢會自動回退到 Elasticsearch 原生引擎執行,您仍能獲得正確的結果,但無法享受 FalconSeek 的效能加速。如果在 native-direct 模式下,系統會直接返回錯誤資訊。