如何将synonym.txt同义词文件上传至Elastic Search?
Elasticsearch 同义词文件配置/上传完整步骤
下面是两种常用的同义词配置方案,你可以根据自己的业务场景选择:
方案1:节点本地部署synonym.txt文件(适合同义词固定、更新频率低的场景)
- 第一步:将你准备好的
synonym.txt文件上传到ES集群每一个节点的配置目录下的同义词专用文件夹,默认路径一般是config/analysis/,如果没有这个文件夹先手动创建,注意要保证ES运行用户对这个文件有读权限。 - 第二步:重启所有ES节点,让节点能识别到新增的同义词文件。
- 第三步:创建索引时在设置中指定同义词过滤器,示例配置如下:
{ "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "synonyms_path": "analysis/synonym.txt" } }, "analyzer": { "my_synonym_analyzer": { "tokenizer": "ik_max_word", "filter": [ "lowercase", "my_synonym_filter" ] } } } } }
如果你用的是ES默认标准分词器,把
ik_max_word替换成standard即可。
- 第四步:测试同义词是否生效,执行测试请求:
POST /_analyze { "analyzer": "my_synonym_analyzer", "text": "你要测试的关键词" }
返回的分词结果里如果包含对应同义词,就说明配置成功。
方案2:直接在索引配置中写入同义词规则(适合同义词少、更新频率高,不想操作节点文件的场景)
不需要上传synonym.txt,直接把同义词规则写在过滤器的synonyms参数里即可,示例配置:
{ "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "synonyms": [ "西红柿,番茄", "土豆,马铃薯" ] } }, "analyzer": { "my_synonym_analyzer": { "tokenizer": "ik_max_word", "filter": [ "lowercase", "my_synonym_filter" ] } } } } }
注意事项
- 同义词文件的编码必须是UTF-8,否则会出现乱码导致规则不生效
- 如果后续更新了synonym.txt文件,需要关闭索引再重新打开才能加载新的规则,执行命令:
POST /你的索引名/_close POST /你的索引名/_open
- 集群部署场景下必须保证所有节点的synonym.txt内容完全一致、存储路径也完全一致,否则会出现部分节点分词结果不一致的问题
内容的提问来源于stack exchange,提问作者Meghana S
相关产品推荐
相关产品推荐

