使用 FalconSeek 云原生内核加速 Elasticsearch 查询

更新时间:
复制 MD 格式

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 版本实例的开启方式请参见上文适用范围。新购实例时,请按照以下步骤完成配置。

  1. 在实例购买页面,开启 FalconSeek 功能。

    • Elasticsearch版本:选择 8.17.0 或者 9.4.0 。

    • 高级增强功能:勾选FalconSeek 云原生内核。

  2. 根据您的业务需求设置其他参数如专有网络、实例规格等,然后完成支付流程。

  3. 待实例创建成功后,您可以通过 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

  1. 在创建索引时,在settings 中添加参数 "index.havenask.engine.enabled": true,启用FalconSeek。

    PUT falcon_seek_test
    {
      "settings": {
        "index.havenask.engine.enabled": true    // 开启FalconSeek功能
      },
      "mappings": {
        "properties": {
          "foo": {
            "type": "keyword"
          }
        }
      }
    }
  2. 写入数据

    POST falcon_seek_test/_bulk
    {"index":{}}
    {"foo":"hello"}
    {"index":{}}
    {"foo":"world"}
    {"index":{}}
    {"foo":"cpp"}
    {"index":{}}
    {"foo":"java"}
  3. 查询数据,默认使用FalconSeek。

    GET falcon_seek_test/_search
    {
      "query": {
        "term":{
          "foo":{
            "value": "hello"
          }
        }
      },
      "sort": [
        {
          "_doc": {
            "order": "desc"
          }
        }
      ]
    }

为已有索引启用 FalconSeek

  1. 以下命令仅创建索引,未开启加速。

    PUT my_existing_index
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      },
      "mappings": {
        "properties": {
          "foo": {
            "type": "keyword"
          }
        }
      }
    }
  2. 使用 _settings API 更新索引配置,即可动态开启。

    PUT my_existing_index/_settings
    {
      "index.havenask.engine.enabled": true
    }
  3. 该场景下若要生效FalconSeek,需要先执行POST /my_existing_index/_close关闭索引,再执行POST /my_existing_index/_open重新打开索引。

管理查询执行策略

FalconSeek 提供了灵活的查询执行策略,允许您在索引级别或单次查询级别中控制请求是由 FalconSeek 处理还是回退至 Elasticsearch 原生引擎。您可以通过 index.havenask.engine.search.type(索引级别)或 havenask_search_type(查询级别)参数进行设置,查询级别的参数优先级更高。

策略

描述

推荐场景

native (默认)

查询优先由 FalconSeek 执行。如果遇到不支持的语法或功能,请求会自动回退到 Elasticsearch 原生引擎执行。

兼顾性能与兼容性的通用生产环境。

es

查询强制由 Elasticsearch 原生引擎执行。

需要进行性能对比或绕过 FalconSeek 的未知问题时。

native-direct

查询强制由 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 原生引擎执行,或直接返回异常。

这种机制在保证高性能的同时,也确保了功能的兼容性和稳定性。

FalconSeek 架构图

常见问题

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 模式下,系统会直接返回错误信息。