欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ek插件------ik中文分词器的使用

程序员文章站 2022-07-12 13:43:13
...

ik分词器的使用

ik分词器的安装

离线安装:
	1、https://github.com/medcl/elasticsearch-analysis-ik/releases下载与es对应版本的ik
	2、解压到es/plugins目录下面
	3、分发到另外的机器上面(目录也是es/plugins)
	4、重启es
在线安装:
	1、在es目录下面输入
	./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.1/elasticsearch-analysis-ik-6.3.1.zip
	2、安装成功后会在plugins下面自动生成ik相关的目录
	3、重启es

下面测试ik分词器是否安装成功。

我们分别使用kibana和head插件

ek插件------ik中文分词器的使用

ek插件------ik中文分词器的使用

此时说明ik分词器设置成功

下面测试对某个索引库进行分词器设置

首先建一个索引库

curl -XPUT http://mini1:9200/chinese

设置索引库下一个type的分词器

//添加分词器的时候要写上type类型
//注意这只是给content字段添加分词器

curl -XPOST http://mini1:9200/chinese/hot/_mapping -H 'Content-Type:application/json' -d'
					{
							"properties": {
								"content": {
									"type": "text",
									"analyzer": "ik_max_word",
									"search_analyzer": "ik_max_word"
								}
							}

					}'

注意:

针对于es集群中已经存在的历史索引库,不会进行重新分词,分词插件不起作用。
或者是新建的索引库,不指定特定的中文分词插件,也是用默认的。

如果你想新增加字段,比如title,并且给它设置分词器,
需要提前给这个字段设置分词器,然后插入数据,否则会报错
curl -XPOST http://mini1:9200/chinese/hot/_mapping -H 'Content-Type:application/json' -d'
					{
							"properties": {
								"title": {
									"type": "text",
									"analyzer": "ik_max_word",
									"search_analyzer": "ik_max_word"
								}
							}

					}'

插入几条数据(注意,对某个字段设置分词器时,要先设置,然后插入数据)

curl  -H 'Content-Type:application/json' -XPOST http://mini1:9200/chinese/hot/1 -d'{"content":"美国留给伊拉克的是个烂摊子吗"}'

curl  -H 'Content-Type:application/json' -XPOST http://mini1:9200/chinese/hot/2 -d'{"content":"*部:各地校车将享最高路权"}'

curl  -H 'Content-Type:application/json' -XPOST http://mini1:9200/chinese/hot/3 -d'{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}'

curl  -H 'Content-Type:application/json' -XPOST http://mini1:9200/chinese/hot/4 -d'{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}'

通过java api查询一下

SearchResponse response = client.prepareSearch("chinese")
                .setTypes("hot")
                .setQuery(QueryBuilders.termQuery("content", "中国"))//termQuery:根据词来进行查询
                .get();

        //分析结果
        for (SearchHit hit : response.getHits()) {
            System.out.println(hit.getSourceAsString());
        }

ek插件------ik中文分词器的使用
成功!

注:

如果嫌每次手动给索引库设置分词器麻烦的话,我们也可以通过更改es的配置文件,来指定默认es分词器

可以通过如下方式简化使用ik分词插件
修改ES_HOME/config/elasticsearch.yml文件,添加index.analysis.analyzer.default.type: ik(把IK设置为默认分词器,这一步是可选的)

自定义词库的设置

有时候默认词库里面的词并不能满足我们的需求,这就需要我们自定义我们的词库。

比如,我现在对“洛云凡”进行分词分析,发现它并不是一个词。

ek插件------ik中文分词器的使用

接下来我定义自己的分词库。

步骤:

1、进入ik插件目录下的config

2、创建一个目录(我这里创建名为"zidingyi"的目录),用于放我们自定义的词库(当然不创建也可以,到时候可以在IKAnalyzer.cfg.xml指定路径)

ek插件------ik中文分词器的使用

3、在zidingyi目录下面创建一个以.dic结尾的文件

cd zidingyi
vi mydic.dic

我加入这两个词:
洛云凡
洛云凡一号

4、配置IKAnalyzer.cfg.xml

ek插件------ik中文分词器的使用

5、发到其他两台

 scp -r config/ aaa@qq.com:/home/newdist/elasticsearch-6.3.1/plugins/ik/

6、重启es

7、再次去head插件中分析一下“洛云凡”和“洛云凡“一号

成功!

ek插件------ik中文分词器的使用
ek插件------ik中文分词器的使用

相关标签: es ik