安装 IK 分词插件
功能概述
为了在 OpenSearch 中获取更好的中文分词效果,OpenSearch 服务集成了 IK 分词插件,并为该插件提供了结巴分词的词库和 IK 自带的词库,同时还支持用户上传自定义词典。
IK 分词插件是基于 Elasticsearch 开源插件 IK Analysis 开发,集成了 Lucene 的 IK 分析器,支持自定义词典,可用于 OpenSearch 的 IK 分词分析。
本小节主要介绍如何使用 IK 分词插件。
操作步骤
-
登录目标集群的的 OpenSearch Dashboard。详情可参考如何登录 OpenSearch Dashboard。
-
在 Dev Tools 的 Console 中执行如下命令行,创建索引。
PUT /ik-test -
在 Dev Tools 的 Console 中执行如下命令行,创建 Mapping。
POST /ik-test/_mapping { "properties": { "content": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" } } } -
在 Dev Tools 的 Console 中执行如下命令行,创建文档。
POST /ik-test/_create/1 { "content": "美国留给伊拉克的是个烂摊子吗" } POST /ik-test/_create/2 { "content": "公安部:各地校车将享最高路权" } POST /ik-test/_create/3 { "content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船" } POST /ik-test/_create/4 { "content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首" } POST /ik-test/_create/5 { "content": "北京优帆科技有限公司于2012年4月正式成立,是全球首家实现资源秒级响应并按秒计量的基础云服务商" } -
在 Dev Tools 的 Console 中执行如下命令行,查看分词效果。
POST /ik-test/_search { "query": { "match": { "content": "优帆科技" } }, "highlight": { "pre_tags": [ "<tag1>", "<tag2>" ], "post_tags": [ "</tag1>", "</tag2>" ], "fields": { "content": {} } } } -
将自定义字典,上传至 Logstash 节点。
<Logstash_IP>为 OpenSearch 集群的 Logstash 节点 IP 地址。curl -F "file=@-;filename=mydict.dic" <Logstash_IP>/dicts/ <<- EOF 云计算 大数据 搜索引擎 EOF说明 -
URL最后的
/不能省略。 -
用户也可以上传自定义词典到其他任意 OpenSearch 节点可以访问 HTTP 服务器。
-
-
访问
<Logstash_IP>/dicts/mydict.dic路径,查看已上传的字典文件,确认字典文件上传成功。 -
参考修改集群配置参数,修改
OpenSearch 节点(热)的remote_exe_dict参数,将其配置为用户自定义字典可访问的 URL。本示例中,需修改为以下内容。http://<Logstash_IP>/dicts/mydict.dic -
执行如下命令,验证中文分词功能。可根据实际需要随时更新用户自定义字典,OpenSearch 会自动检测 HTTP 响应头中的 Last-Modified 和 ETag 的变化,来进行分词字典的热更新。
INDEX=chinese-news # 可根据实际情况调整 MAPPING_TYPE=_doc # 创建 $INDEX 索引 curl -XPUT $OS_IP:9200/$INDEX; echo URL=$OS_IP:9200/$INDEX # 创建 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=$OS_IP:9200/$INDEX/$MAPPING_TYPE curl -H "Content-Type: application/json" -d'{"content":"'$1'"}' $url; echo } sampleData=" 【云计算大数据】搜索引擎选择 互联网金融的发展、风险与监管 云计算在互联网搜索中的应用 - 国务院新闻办公室 终于有人把云计算、大数据和人工智能讲明白了! 浅谈物联网、云计算、大数据、人工智能的关系? " for data in $sampleData; do postData "$data"; done # 高亮查询 query() { curl -s -H "Content-Type: application/json" $OS_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