Elasticsearch 获取中文分词
更新时间:2025-08-15 03:41:38
功能概述
为了在 Elasticsearch 中获取更好的中文分词效果,ELK 集成了 IK Analysis 中文分词插件,并为该插件提供了结巴分词的词库和 IK 自带的搜狗词库,同时还支持用户上传自定义词典。IK Analysis 插件用法请参考 官方文档。
本文为用户介绍 Elasticsearch API 的中文分词使用方式。
操作步骤
步骤一:上传字典文件
-
把自定义字典上传到可访问到的 HTTP 服务器上。本示例将通过如下命令行,将词典上传到某个 Logstash 节点,用户也可以上传至其他任意 Elasticsearch 节点可访问的 HTTP 服务器即可。
curl -F "file=@-;filename=mydict.dic" $LS_IP/dicts/ <<- EOF 云平台 优帆科技 优帆 EOF说明 URL最后的
/不能省略。 -
上传成功后可通过访问
$LS_IP/dicts/mydict.dic来查看上传的字典文件。
步骤二:修改配置参数
-
参考修改集群配置参数,修改 Elasticsearch 节点的
remote_ext_dict参数为用户自定义字典的可访问 URL。如,此处,根据前文示例,可设置为
http://$LS_IP/dicts/mydict.dic -
重启 Elasticsearch 节点。
步骤三:测试中文分词
-
待 Elasticsearch 重启完成后,执行以下命令行,测试中文分词功能。
INDEX=chinese-news # 可根据实际情况调整 MAPPING_TYPE=_doc # ELK 6.8.0 - QingCloud 2.1.0 以前版本请去掉开头的下划线,即:doc # 创建 $INDEX 索引 curl -XPUT $ES_IP:9200/$INDEX; echo URL=$ES_IP:9200/$INDEX # ELK 6.8.6 及以下版本请使用如下地址 # URL=$ES_IP:9200/$INDEX/$MAPPING_TYPE # 创建 mapping curl -s -H "Content-Type: application/json" $URL/_mapping -d' { "properties": { "content": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" } } }'; echo # 索引 一些 文档 postData() { local url=$ES_IP:9200/$INDEX/$MAPPING_TYPE curl -H "Content-Type: application/json" -d'{"content":"'$1'"}' $url; echo } sampleData=" 美国留给伊拉克的是个烂摊子吗 公安部:各地校车将享最高路权 中韩渔警冲突调查:韩警平均每天扣1艘中国渔船 中国驻洛杉矶领事馆遭亚裔男子枪击,嫌犯已自首 北京优帆科技有限公司于2012年4月正式成立,是全球首家实现资源秒级响应并按秒计量的基础云服务商 云平台的12字决:从初创企业到云生态的蜕变 " for data in $sampleData; do postData "$data"; done # 高亮查询 query() { curl -s -H "Content-Type: application/json" $ES_IP:9200/$INDEX/$MAPPING_TYPE/_search -d@- <<- EOF | { "query" : { "match" : { "content" : "$1" }}, "highlight" : { "pre_tags" : ["<tag1>", "<tag2>"], "post_tags" : ["</tag1>", "</tag2>"], "fields" : { "content" : {} } } } EOF grep --color "<tag1>[^<]*</tag1>" } words=" 中国 云平台 优帆科技 " sleep 5; for word in $words; do query "$word"; done -
查看中文分词结果,结果如下图红色部分所示即为成功。即
中国、云平台、优帆科技被当做固定的中文分词表示。
-
可根据实际需要随时更新用户自定义字典,Elasticsearch 会自动检测 HTTP 响应头中的 Last-Modified 和 ETag 的变化,来进行分词字典的热更新。