NOTE:默认ES中采用标准分词器进行分词,这种方式并不适用于中文网站,因此需要修改ES对中文友好分词,从而达到更佳的搜索效果
# 1、定义:就是将一本文本中关键词拆分出来
我是一个博客 分词器 我 是 一个 博客
分词特点:拆分关键词,去掉停用词和语气词
# 2、ES中提供的分词器
1)默认标准分词器(standard analyzer) 英文:单词分词 中文:单字分词
2)简单分词器(simple analyzer) 英文:单词分词,去掉数字 中文:不分词
# 3、测试不同分词器
GET _analyze
{
"analyzer":"simple",
"text":"redis 非常号用 111"
}
NOTE:要求版本严格与当前使用版本一致,如需使用其他版本替换6.2.4为使用的版本号
# 1、在es安装目录中执行如下命令
./bin/elasticsearch-plugin install http://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip
# 2、验证 查看
ls plugins/
cd /plugins/analysis-ik/
ls
# 3、重启es生效
可以将对应的IK分词器下载到本地,然后在安装
# 1、下载对应版本
wget http://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip
# 2、解压
unzip elasticsearch-analysis-ik-6.2.4.zip #先使用yum install -y unzip安装压缩包
# 3、移动到es安装目录的plugins目录中
ls elasticsearch-6.2.4/plugins/
mv elasticsearch elasticsearch-6.2.4/plugins/
ls elasticsearch-6.2.4/plugins/
NOTE:当我们想要分词的词如网络热词等未进行分词可以手动指定分词,可以通过ES安装目录下/plugins/ik/config目录中名字:IKAnalyzer.cfg.xml进行配置如下:
<properties>
<comment>IK Analyzer扩展配置comment>
<entry key="ext_dict">ext.dicentry>
<entry key="ext_stopwords">entry>
properties>
定义:现有IK分词器无法将这个词切分成一个关键词,但是有希望某个词为关键词
ik分词器 大佬 遭遇 突击 ===>不明觉厉 等等。
修改配置文件如下配置:
<entry key="ext_dict">ext.dicentry>
定义:现有IK分词器将一个关键词切分为一个词,但是出于某种原因这个词不能被作为关键词出现
配置IK的配置文件:ES安装目录下/plugins/ik/config目录中名字:IKAnalyzer.cfg.xml
<entry key="ext_stopwords">entry>
配置IK的配置文件:ES安装目录下/plugins/ik/config目录中名字:IKAnalyzer.cfg.xml
url
words_location
1、准备一个nginx服务器,里面方入init.txt文件,用来存放远程扩展词典
2、在浏览器访问远程扩展词典,能访问即可
3、在 http://192.168.0.1/init.txt
4、如果启动报错:
java.security.AccessControlException:access denied (“java.net.SocketPermission” “192.168.0.1” “connect,resolve”)
5、修改虚拟机安全策略
修改:/user/java/jdk1.8.0_171-amd64/jre/lib/security/java.policy加入如下配置
permission java.net.SocketPermission “192.168.0.1”,“connect,resolve”
目前该插件支持热更新IK分词器,无需重启es
,通过上文在IK配置文件中提到到如下配置
<entry key="remote_ext_dict">urlentry>
<entry key="remote_ext_stopwords">words_locationentry>
其中location
是指一个url,比如http://myweb.com/getDict
,该请求只需满足以下两点即可完成分词热更新
1、该http请求需要返回两个头部(header),一个是Last-Modified
,一个是ETag
,者两者都是字符串类型,只要有一个发生变化,该插件就回去抓取新的分词进而更新词库
2、该http请求返回的内容格式是一行一个分词,换行符用\n
即可。
满足上面两点要求就可以实现热更新分词了,不需要重启ES实例
可以将需要自动更新的热刺方在一个UTF-8编码的.txt文件里,方在nginx或者其他简易的http server下,当.txt文件修改时,http server会在客户端请求该文件时自动返回相应的Last-Modified和ETag,可以另外做一个工具来从业务系统提取相关词汇,并更新这个.txt文件
1、远程词典修改不需要重启服务,编码必须都是UTF-8
2、停用词:不会进行分词,过滤分词索引查询
3、优先级:远程>本地(叠加的方式) 停用词>扩展此
4、不能对原始数据进行分词,只能对只有添加的数据进行分词判断处理,只能删除全部文档重新建立索引
ElasticSearch学习笔记(1)· ES基本概念
ElasticSearch学习笔记(2)· 基于Kibana的基本CRUD
ElasticSearch学习笔记(3)· ES高级检索(query)
ElasticSearch学习笔记(4)· ES IK分词器
ElasticSearch学习笔记(5)· Java操作Elasticsearch6.2.4
ElasticSearch学习笔记(6)· Java操作Elasticsearch7.6.1
ElasticSearch学习笔记(7)· Springboot+SpringData操作ES
ElasticSearch学习笔记(8)· ES集群的搭建