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 功能仅支持在新购实例时开启。对于存量实例,如果您希望使用该功能,建议您创建一个符合要求的新实例,并使用阿里云数据传输服务(DTS)或 Logstash 等工具将数据迁移至新实例。
Q:如果我执行了一个 FalconSeek 不支持的查询会发生什么?
A:这取决于您的查询执行策略。在默认的 native 模式下,查询会自动回退到 Elasticsearch 原生引擎执行,您仍能获得正确的结果,但无法享受 FalconSeek 的性能加速。如果在 native-direct 模式下,系统会直接返回错误信息。