ES 在处理复杂聚合查询、高基数词条查询、向量检索等场景时可能面临性能瓶颈。FalconSeek 云原生内核基于阿里巴巴自研的 Havenask 引擎,通过 C++ 列式内存与全异步框架,在高度兼容 ES 生态的同时显著提升查询性能。本文档介绍如何启用 FalconSeek 实现默认查询加速,涵盖实例创建、索引/字段级配置与查询策略管理。
适用范围
-
邀测免费使用:FalconSeek当前处于限量免费测试阶段。
-
版本限制:当前功能强依赖于 Elasticsearch 8.17.0 或 9.4.0 版本。
-
新购实例:购买 8.17.0 或 9.4.0 版本实例时,可直接开启 FalconSeek 功能。
-
存量实例:已创建的 8.17.0 或 9.4.0 版本实例,可登录控制台进入实例基本信息页面,在引擎内核模块中通过配置变更开启或关闭 FalconSeek 功能。
创建实例并开启 FalconSeek
新购 8.17.0 或 9.4.0 版本实例时,可在购买页直接开启 FalconSeek。存量 8.17.0 或 9.4.0 版本实例的开启方式请参见上文适用范围。新购实例时,请按照以下步骤完成配置。
-
在实例购买页面,开启 FalconSeek 功能。
-
Elasticsearch版本:选择 8.17.0 或者 9.4.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 云原生内核通过深度优化的 C++ 引擎替换了 Elasticsearch 底层的部分 Lucene 组件。当您发起一个查询请求时,请求会先到达 FalconSeek 插件层。插件层会判断该查询是否能被 FalconSeek 引擎高效处理:
-
支持的查询:请求将被转发至高性能的 FalconSeek 引擎执行。
-
不支持的查询:系统会根据您设置的策略,自动将查询回退至 Elasticsearch 原生引擎执行,或直接返回异常。
这种机制在保证高性能的同时,也确保了功能的兼容性和稳定性。

常见问题
Q:我可以在已有的 Elasticsearch 实例上开启 FalconSeek 功能吗?
A:分情况。8.17.0 或 9.4.0 版本实例(含存量实例)可在实例基本信息页的引擎内核模块中,通过配置变更开启 FalconSeek。如果现有实例不是这两个版本,则无法直接开启,需要新购一个 8.17.0 或 9.4.0 版本实例,并使用阿里云数据传输服务(DTS)或 Logstash 等工具将数据迁移至新实例,请参见迁移方案选取指南。
Q:如果我执行了一个 FalconSeek 不支持的查询会发生什么?
A:这取决于您的查询执行策略。在默认的 native 模式下,查询会自动回退到 Elasticsearch 原生引擎执行,您仍能获得正确的结果,但无法享受 FalconSeek 的性能加速。如果在 native-direct 模式下,系统会直接返回错误信息。