ElasticSearch学习笔记(4)· ES IK分词器

目录

  • 九、IK中文分词器
    • 1、在线安装IK中文分词器
    • 2、本地安装IK中文分词器
    • 3、扩展词
    • 4、停用词
    • 5、配置远程词典
    • 6、分词器总结

九、IK中文分词器

NOTE:默认ES中采用标准分词器进行分词,这种方式并不适用于中文网站,因此需要修改ES对中文友好分词,从而达到更佳的搜索效果

# 1、定义:就是将一本文本中关键词拆分出来
	我是一个博客	分词器	我 是  一个 博客	
	分词特点:拆分关键词,去掉停用词和语气词
# 2、ES中提供的分词器
	1)默认标准分词器(standard analyzer)	英文:单词分词	中文:单字分词
	2)简单分词器(simple analyzer)		 英文:单词分词,去掉数字  中文:不分词
# 3、测试不同分词器
GET _analyze
{
	"analyzer":"simple",
	"text":"redis 非常号用 111"
}

1、在线安装IK中文分词器

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生效

2、本地安装IK中文分词器

可以将对应的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/

3、扩展词

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>

4、停用词

定义:现有IK分词器将一个关键词切分为一个词,但是出于某种原因这个词不能被作为关键词出现

配置IK的配置文件:ES安装目录下/plugins/ik/config目录中名字:IKAnalyzer.cfg.xml


<entry key="ext_stopwords">entry>

5、配置远程词典

配置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文件

6、分词器总结

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集群的搭建

你可能感兴趣的:(ElasticStack,elasticsearch)