概述 #
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 中的存储分为两层:
- 规则索引 (
.match_rules):存储规则元数据和源文本 - 编译产物:存储编译后的规则数据库文件
规则库文档包含以下字段:
| 字段 | 说明 |
|---|---|
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_missing | false | 是否忽略错误 |
regex_start_at_word | true | 正则从词边界开始 |
fields | [] | 指定匹配的字段列表 |
default_match_field | “content” | 未指定字段的默认匹配字段 |
target_field | “tags” | 匹配结果写入的字段 |
文档经过 Pipeline 时,规则引擎会:
- 提取文档字段内容
- 使用 AC 自动机进行快速匹配
- 将匹配的规则标签写入目标字段
性能优化 #
- ThreadLocal 匹配器:每个线程维护独立实例,避免同步开销
- 规则ID数组映射:使用数组代替 HashMap,查找速度提升 14 倍,内存减少 87%
- 字段集合优化:使用 Set 实现 O(1) 字段查找
多节点同步 #
节点启动时,同步服务会自动检查并同步规则库:
- 等待集群恢复
- 查询
.match_rules索引中已编译的规则库 - 检查本地是否存在对应的编译产物
- 缺失则进行本地编译
- 更新
compiled_nodes列表
同步期间会添加集群阻塞,防止写入操作,确保数据一致性。
许可证控制 #
规则引擎需要许可证启用 rule-engine 功能。许可证验证包括:
- 许可证存在性检查
- 签名验证
- 过期时间检查
rule-engine功能启用检查
总结 #
Easysearch 规则引擎是一个功能完整、性能优异的规则匹配系统,具有以下特点:
- 高性能匹配:基于 AC 自动机算法,支持大规模规则库
- 灵活的表达式:支持 OR、AND、字段限定、正则、邻近查询等
- 多节点支持:自动同步,确保集群一致性
- 无缝集成:与 Ingest Pipeline 完美配合
- 完善的许可证控制:保障商业合规性
该系统适用于内容安全审核、舆情分析、数据分类等多种场景。





