天天看点

ElasticSearch实战之配置IK中分分词器(五)

IK分词器

NOTE:

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

1.1 在线安装IK

在线安装IK

(v5.5.1版本后开始支持在线安装 )
1. 在es安装目录中执行如下命令

[[email protected] elasticsearch-6.2.4]$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip
-> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip
[=================================================] 100%
-> Installed analysis-ik
[[email protected] elasticsearch-6.2.4]$ ls plugins/
analysis-ik
[[email protected] elasticsearch-6.2.4]$ cd plugins/analysis-ik/
[[email protected] analysis-ik]$ ls
commons-codec-1.9.jar    elasticsearch-analysis-ik-6.2.4.jar  httpcore-4.4.4.jar
commons-logging-1.2.jar  httpclient-4.5.2.jar                 plugin-descriptor.properties

2. 重启es生效
           
NOTE: 要求版本严格与当前使用版本一致,如需使用其他版本替换

6.2.4

为使用的版本号

1.2 本地安装IK

可以将对应的IK分词器下载到本地,然后再安装,推荐使用本地方式进行安装

1. 下载对应版本
	[[email protected] ~]$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip

2. 解压
	[[email protected] ~]$ unzip elasticsearch-analysis-ik-6.2.4.zip #先使用yum install -y unzip

3. 移动到es安装目录的plugins目录中
	[[email protected] ~]$ ls elasticsearch-6.2.4/plugins/
	[[email protected] ~]$ mv elasticsearch elasticsearch-6.2.4/plugins/
	[[email protected] ~]$ ls elasticsearch-6.2.4/plugins/
		elasticsearch
	[[email protected] ~]$ ls elasticsearch-6.2.4/plugins/elasticsearch/
		commons-codec-1.9.jar    config            httpclient-4.5.2.jar  		plugin-descriptor.properties
		commons-logging-1.2.jar  elasticsearch-analysis-ik-6.2.4.jar  httpcore-4.4.4.jar
		
4. 重启es生效
           

1.3 测试IK分词器

NOTE: IK分词器提供了两种mapping类型用来做文档的分词分别是

ik_max_word

ik_smart

ik_max_word 和 ik_smart 什么区别?

ik_max_word: 会将文本做最细粒度的拆分

,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分

,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

测试数据

#1. 删除索引

DELETE /ems

#2. 创建索引

PUT /ems
{
  "mappings":{
    "emp":{
      "properties":{
        "name":{
          "type":"text",
           "analyzer": "ik_max_word",
           "search_analyzer": "ik_max_word"
        },
        "age":{
          "type":"integer"
        },
        "bir":{
          "type":"date"
        },
        "content":{
          "type":"text",
          "analyzer": "ik_max_word",       #使用ik分词器
          "search_analyzer": "ik_max_word" #使用ik分词器
        },
        "address":{
          "type":"keyword"
        }
      }
    }
  }
}

#3.批量插入数据
PUT /ems/emp/_bulk
  {"index":{}}
  {"name":"小黑","age":23,"bir":"2012-12-12","content":"为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平","address":"北京"}
  {"index":{}}
  {"name":"王小黑","age":24,"bir":"2012-12-12","content":"Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式","address":"上海"}
  {"index":{}}
  {"name":"张小五","age":8,"bir":"2012-12-12","content":"Spring Cloud 作为Java 语言的微服务框架,它依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。Spring Cloud 的组件非常多,涉及微服务的方方面面,井在开源社区Spring 和Netflix 、Pivotal 两大公司的推动下越来越完善","address":"无锡"}
  {"index":{}}
  {"name":"win7","age":9,"bir":"2012-12-12","content":"Spring的目标是致力于全方位的简化Java开发。 这势必引出更多的解释, Spring是如何简化Java开发的?","address":"南京"}
  {"index":{}}
  {"name":"梅超风","age":43,"bir":"2012-12-12","content":"Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API","address":"杭州"}
  {"index":{}}
  {"name":"张无忌","age":59,"bir":"2012-12-12","content":"ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口","address":"北京"}

# 4.检索查看效果
GET /ems/emp/_search
{
  "query":{
    "term":{
      "content":"框架"
    }
  },
  "highlight": {
    "pre_tags": ["<span style='color:red'>"],
    "post_tags": ["</span>"],
    "fields": {
      "*":{}
    }
  }
}
           

1.4 配置扩展词

IK支持自定义

扩展词典

停用词典

,所谓**

扩展词典

就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典。

停用词典

**就是有些词是关键词,但是出于业务场景不想使用这些关键词被检索到,可以将这些词放入停用词典。

如何定义扩展词典和停用词典可以修改IK分词器中

config

目录中

IKAnalyzer.cfg.xml

这个文件。

NOTE:

词典的编码必须为UTF-8,否则无法生效

1. 修改vim IKAnalyzer.cfg.xml

    <?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">ext_dict.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">ext_stopword.dic</entry>
    </properties>

2. 在ik分词器目录下config目录中创建ext_dict.dic文件   编码一定要为UTF-8才能生效
	vim ext_dict.dic 加入扩展词即可

3. 在ik分词器目录下config目录中创建ext_stopword.dic文件 
	vim ext_stopword.dic 加入停用词即可

4.重启es生效
           

继续阅读