1.es扩展词库
在/usr/local/es/elasticsearch-node01/plugins/elasticsearch-analysis-ik-7.2.1/config中新建文件
new_word.dic
echo "上海警告" > new_word.dic
修改IKAnalyzer.cfg.xml
<entry key="ext_dict">new_word.dic</entry>
重启es集群
sh kill-es.sh
sh r-start.sh
在kibana中执行会发现《上海警告》分格出
GET _analyze?pretty
{
"analyzer": "ik_smart",
"text": "【上海警告】您的工作还有一部分没有做完1"
}
热更新词库
其实上述词库个人认为没有啥应用的余地,因为一个项目不可能为了一个扩展词而去重启es,所以需要热更新词库,
就实现此目录有两种方法
1.更改ik的一个源码
2.修改IKAnalyzer.cfg.xml中的
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">new_word.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<entry key="remote_ext_dict">http://106.14.65.218:8081/new_word.dic</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
这里我们需要可以返回特点格式的文件这里我用nginx中的一个静态文件代替,读者可通过api接口返回此文件
简单安装nginx
docker pull nginx
创建目录备用
mkdir -p /usr/local/nginx/www /usr/local/nginx/logs /usr/local/nginx/conf
这里需要nginx.conf 手写的话风险大
docker images
docker run --name nginx -p 8081:80 -d 4571e56e27f0
docker ps
docker cp 容器id:/etc/nginx/nginx.conf /usr/local/nginx/conf
运行
docker run --name=nginx -v /usr/local/nginx/www:/usr/share/nginx/html -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/logs:/var/log/nginx -p 8081:80 -d 4571e56e27f0
在www/目录下创建 index.html
在kibana中执行会发现《苹果树警告》分格出
GET _analyze?pretty
{
"analyzer": "ik_smart",
"text": "【苹果树警告】您的工作还有一部分没有做完"
}
3.同义词
在工作中我遇到了以下要求
"【苹果树】您的工作还有一部分没有做完" 中的 “苹果树” 是等价于 ”上海同义词“
所以es要想实现此需求,则需要扩展词库
1.在/usr/local/es/elasticsearch-node01/plugins/elasticsearch-analysis-ik-7.2.1/config中新建文件
new_synonyms.txt
echo "苹果树,上海同义词"
https://github.com/bells/elasticsearch-analysis-dynamic-synonym
2.删除索引,重新建立能够支持同义词的索引结构
DELETE /es_sms
PUT /es_sms
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 1
},
"analysis":{
"filter":{
"javatom_synonym_filter":{
"type":"synonym",
"synonyms_path":"elasticsearch-analysis-ik-7.2.1/config/javatom_synonyms.txt"
},
"javatom_remote_synonym" : {
"type" : "dynamic_synonym",
"synonyms_path" : "http://106.14.65.218:8081/javatom_synonyms.txt",
"interval": 30
}
},
"analyzer":{
"ik_sms":{
"type":"custom",
"tokenizer":"ik_smart",
"filter":["javatom_synonym_filter","javatom_remote_synonym"]
},
"ik_sms_max":{
"type":"custom",
"tokenizer":"ik_max_word",
"filter":["javatom_synonym_filter","javatom_remote_synonym"]
}
}
},
"mappings": {
"properties": {
"id":{"type": "integer"},
"phone":{"type":"keyword"},
"content":{"type":"text","analyzer":"ik_sms_max","search_analyzer":"ik_sms"}
}
}
}
3.在上述我的配置中就可以我配置两个中方式来获取同义词
3.1 javatom_synonym_filter
3.2 javatom_remote_synonym 热更新同义词
第二种方式返回文件只要与javatom_synonym_filter格式相同就可以