1、配置节点1
- 定义词库
cd node1/config/analysis-ik
echo '凯悦' > vim new_word.dic
在标准分词中,“凯悦”被为开两个词,会在业务语义中造成搜索误差。
- 2、词库配置
编辑config/IKAnalyzer.cfg.xml
将new_word.dic配置到文件中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">new_word.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
2、将扩展词库文件与配置复制到节点2,与节点3
cp new_word.dic /opt/elasticsearch8.0.0/node2/config/analysis-ik/
cp new_word.dic /opt/elasticsearch8.0.0/node3/config/analysis-ik/
cp IKAnalyzer.cfg.xml /opt/elasticsearch8.0.0/node2/config/analysis-ik/
cp IKAnalyzer.cfg.xml /opt/elasticsearch8.0.0/node3/config/analysis-ik/
3、重启ES
# 杀掉进程
# 重启
jps:s 查看进程
kill -9 ... :杀进程
重启:
node1/bin/elasticsearch -d
node2/bin/elasticsearch -d
node3/bin/elasticsearch -d
4、更新搜索 - UPDATE BY QUERY
(在建索引时,需要将扩展词库加入,否则有可能搜不到数据)
POST /shop/_update_by_query
{
"query": {
"bool": {
"must": [
{"term": {"name":"凯"}},
{"term": {"name":"悦"}}
]
}
}
}
5、在Kibana上验证
GET /shop/_analyze
{
"analyzer": "ik_smart",
"text": "凯悦"
}
GET /shop/_search
{
"query": {
"match": {
"name": "凯悦"
}
}
}
不会再查到 只有一个 "凯" 或 "悦” 的单独的记录了, 输出结果
"tokens" : [ { "token" : "凯悦", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 } ] }
6、热更新词库 - 修改上述配置中第1点配置信息
1、创建一个Http服务
- 头部加入
- last-modified
- etag
只要这两个字段的信息有变更,则数据自动重新加载
es: 每1分钟检索一次
2、修改config/IKAnalyzer.cfg.xml配置文件指向Http服务
<entry key="ext_dict">http://site.com/newWordAction</entry>
3、其他
后继步骤同上
网友评论