跳到正文
Elaine Blog
返回

自定义分词、同义词和中文搜索

Elasticsearch 与搜索架构

中文没有天然空格边界,默认规则往往不能表达品牌、型号和业务短语。正确做法不是先安装某个插件,而是先建立分析回归集,再比较内置分析器、插件分词、词典和同义词方案。

Table of contents

Open Table of contents

从期望 token 开始

为真实查询写期望,例如“苹果手机壳”可能需要 [苹果, 手机壳],而不是单字或 [苹果手机, 壳]。使用 _analyze API同时验证索引分析器和搜索分析器:

POST products/_analyze
{
  "analyzer": "product_search",
  "text": ["Java架构师", "苹果手机壳", "iPhone 17 Pro"]
}

词典越大不一定越好。过度切分提高召回但增加噪声,切分过粗则漏召回。评测必须落到 Top-K 相关性,而不是只比较 token 是否“看起来合理”。

实验室为了展示倒排过程,中文采用单字切分:

mvn -Dtest=SearchArchitectureTest#invertedIndexFindsDocumentsAndFilterDoesNotChangeScore test

源码明确标注它不适合生产;正式实现应通过当前 Elasticsearch 与插件兼容矩阵选择版本。

同义词放在搜索时

“笔记本, laptop”和“退款 => 售后退款”表达不同规则。多词同义词通常使用 synonym_graph,并放在搜索分析器中,便于更新且无需重建全部文档。索引时展开同义词会固化旧规则并增加词项。

Elastic 同义词文档支持通过同义词集合管理规则。上线前验证规则解析错误、循环映射、大小写、停用词顺序和零结果率;变更要有版本、审核和回滚。

中文检索还需要什么

拼音、前缀、纠错和同义词是不同能力,分别评测。品牌型号字段可同时保留 keyword 与标准化子字段;自动补全使用专门字段,避免在正文上执行前导通配符。敏感词和访问权限必须在检索前过滤,不能只在页面隐藏。

下一步

继续阅读09-10 高可用集群、容量规划与性能调优,计算分片、堆、磁盘和恢复预算。


分享这篇文章:

上一篇
深分页、游标与 Search After
下一篇
高可用集群、容量规划与性能调优