在云栈社区的技术讨论中,不少开发者对 Elasticsearch 的停用词过滤细节仍有疑问。自定义词典与停用词是优化中文搜索准确性的核心组合,下面就以 IK 分词器为例,演示从默认词库到自定义中文停用词的完整配置过程。
为什么要使用停用词
在Elasticsearch中,自定义词典和停用词过滤是优化中文搜索效果的核心手段。自定义词典用于补充领域专属词汇、修正分词结果,而停用词过滤则剔除“的”“是”“在”等无实际语义的高频词,减少索引冗余并提升查询准确性。
IK分词器中如何使用停用词
Elasticsearch 安装好 analysis-ik 中文插件后,在 config/analysis-ik 目录下会生成两个停用词文件:stopword.dic 和 extra_stopword.dic。其中 stopword.dic 是英文停用词,默认即生效;extra_stopword.dic 是中文停用词,默认并不会被加载。
1. 查看 stopword.dic(英文停用词)默认是否生效
curl -X POST "https://127.0.0.1:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"analyzer":"ik_max_word","text":"She is a beautiful girl"}' -u elastic:654321 -k
分词结果:she、beautiful、girl,而 is 和 a 因为是停用词没有出现——stopword.dic(英文停用词)默认生效。
curl -X POST "https://127.0.0.1:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"analyzer":"ik_max_word","text":"也了仍电脑"}' -u elastic:654321 -k
分词结果:也、了、仍、电脑,所有词都被切开——extra_stopword.dic(中文停用词)默认未生效。
我们需要配置 IK Analyzer 的配置文件来加载这个停用词文件。
编辑 config/analysis-ik/IKAnalyzer.cfg.xml,加入以下内容:
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">extra_stopword.dic</entry>
</properties>
保存后重启 Elasticsearch,再次验证中文停用词:
curl -X POST "https://127.0.0.1:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"analyzer":"ik_max_word","text":"也了仍电脑"}' -u elastic:654321 -k
分词结果只剩“电脑”,说明 extra_stopword.dic 已生效,也、了、仍作为停用词已被过滤。
注意事项
- 不同领域的停用词可能不同
例如电商领域,停用词可能是“商品”“产品”“购买”等高频低价值词;社交媒体则可能是“分享”“点赞”“评论”等平台通用词。
- 谨慎选择停用词
过度过滤会丢失语义信息,造成查询遗漏。
- 区分索引与查询分析器
可在索引时使用严格停用词,查询时采用宽松策略(甚至不禁用),以提高召回率。
- 结合同义词处理
停用词与同义词常配合使用,构建更智能的搜索体验。
- 监控与迭代
通过用户搜索日志分析高频无效词,持续优化停用词表。
|