📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

概述 #

Easysearch 规则引擎是一个高性能的文本规则匹配系统,通过 Ingest Pipeline 集成,可以对文档进行实时规则匹配和标签标注。它支持复杂的规则表达式语法,使用 AC 自动机算法实现高效匹配,并支持多节点集群环境下的规则同步。

核心架构 #

规则引擎采用插件化架构,主要组件包括:

  • 规则编译服务:将规则文本编译为高效的数据结构
  • 索引管理服务:管理规则库的元数据和状态
  • 同步服务:负责多节点集群间的规则同步
  • Ingest处理器:在文档流入时执行规则匹配
  • 数据库访问层:提供底层规则库的访问接口

规则定义 #

规则以文本形式存储,每行一条规则,格式为:

规则表达式<TAB>#序号#标签描述

规则表达式支持以下语法

类型示例说明
简单 OR中国 or 人民匹配任一关键词
简单 AND中国 and 人民同时匹配两个关键词
字段限定title(中国) and content(发展)限定字段匹配
正则表达式[{{[0-9]{4}}} . "-" . {{[0-9]{2}}}]日期格式匹配
邻近查询商品 near/3 (手机 or 笔记本)词间距离限制
手机号匹配[(1[3-9][0-9]{9})]正则匹配手机号

规则示例

枪 or 手枪 or 步枪 or 猎枪	gun_weapon
(枪 or 手枪 or 步枪) and (出售 or 销售 or 买卖 or 交易)	gun_trade
(枪 or 手枪 or 步枪) near/10 [{{(1[3-9][0-9]{9})|(8[0-9]{10})}}]	gun_trade_contact

规则存储 #

规则在 Easysearch 中的存储分为两层:

  1. 规则索引 (.match_rules):存储规则元数据和源文本
  2. 编译产物:存储编译后的规则数据库文件

规则库文档包含以下字段:

字段说明
name规则库名称
description规则库描述
tags规则库标签
rules规则文本(多行)
status编译状态:pending/compiled/partial/failed
total_rules规则总数
fields声明的匹配字段
composite复合字段
compiled_nodes已编译的节点列表

编译流程 #

规则使用前需要先编译为高效的数据结构:

# 1. 导入规则到索引
POST /_match_rules/{repo_id}/_import
{
  "name": "安全事件规则库",
  "description": "涉枪、涉毒、涉恐检测规则",
  "rules": ["枪 or 手枪 or 步枪"]
}

# 2. 编译规则
POST /_match_rules/{repo_id}/_compile
{
  "fields": ["title", "content"],
  "composite": ["combined_field"]
}

多节点编译:在集群环境中,编译请求会广播到所有 Ingest 节点,各节点并行编译后聚合结果。

规则匹配 #

规则匹配通过 Ingest Pipeline 配置实现:

PUT _ingest/pipeline/security-pipeline
{
  "processors": [
    {
      "check_match_rules": {
        "id": "security_v1",
        "fields": ["title", "content"],
        "target_field": "tags"
      }
    }
  ]
}

配置参数

参数默认值说明
id(必需)规则库ID
ignore_missingfalse是否忽略错误
regex_start_at_wordtrue正则从词边界开始
fields[]指定匹配的字段列表
default_match_field“content”未指定字段的默认匹配字段
target_field“tags”匹配结果写入的字段

文档经过 Pipeline 时,规则引擎会:

  1. 提取文档字段内容
  2. 使用 AC 自动机进行快速匹配
  3. 将匹配的规则标签写入目标字段

性能优化 #

  • ThreadLocal 匹配器:每个线程维护独立实例,避免同步开销
  • 规则ID数组映射:使用数组代替 HashMap,查找速度提升 14 倍,内存减少 87%
  • 字段集合优化:使用 Set 实现 O(1) 字段查找

多节点同步 #

节点启动时,同步服务会自动检查并同步规则库:

  1. 等待集群恢复
  2. 查询 .match_rules 索引中已编译的规则库
  3. 检查本地是否存在对应的编译产物
  4. 缺失则进行本地编译
  5. 更新 compiled_nodes 列表

同步期间会添加集群阻塞,防止写入操作,确保数据一致性。

许可证控制 #

规则引擎需要许可证启用 rule-engine 功能。许可证验证包括:

  • 许可证存在性检查
  • 签名验证
  • 过期时间检查
  • rule-engine 功能启用检查

总结 #

Easysearch 规则引擎是一个功能完整、性能优异的规则匹配系统,具有以下特点:

  1. 高性能匹配:基于 AC 自动机算法,支持大规模规则库
  2. 灵活的表达式:支持 OR、AND、字段限定、正则、邻近查询等
  3. 多节点支持:自动同步,确保集群一致性
  4. 无缝集成:与 Ingest Pipeline 完美配合
  5. 完善的许可证控制:保障商业合规性

该系统适用于内容安全审核、舆情分析、数据分类等多种场景。