IK分词器

  • 一. IK分词器
  • ①. 在线安装IK
  • 1. 必须将ElasticSearch服务中原始数据删除
  • 2. 在ElasticSearch安装目录中执行如下命令
  • 2. 重启ElasticSearch
  • 3.测试IK安装
  • 4. 在线安装IK配置文件位置
  • ②. 本地安装IK
  • 1. 下载IK对应版本上传
  • 2. 解压IK分词器
  • 3. 移动IK到Elasticsearch安装目录的plugins目录中
  • 4. 重启Elasticsearch生效
  • 5. 本地安装IK配置目录为
  • ③. 测试IK分词器
  • ④. 配置本地扩展词
  • 1. 修改IKAnalyzer.cfg.xml配置文件
  • 2. 在ik分词器目录下config目录中创建ext_dict.dic文件
  • 3. 在ik分词器目录下config目录中创建ext_stopword.dic文件
  • 4.重启Elasticsearch生效
  • 5.测试IK自定义扩展词
  • ④. 配置远程连接扩展词
  • 1. 创建Springboot项目并且创建扩展词文件夹启动项目
  • 2. 修改IKAnalyzer.cfg.xml配置文件
  • 3. 重启Elasticsearch
  • 4. 测试远程配置文件


一. IK分词器

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

①. 在线安装IK

在线安装IK (v5.5.1版本后开始支持在线安装 )

1. 必须将ElasticSearch服务中原始数据删除

  • 进入es安装目录中将data目录数据删除
rm -rf data

es 命令 查看有哪些分词器 es使用ik分词器查询_es 命令 查看有哪些分词器

2. 在ElasticSearch安装目录中执行如下命令

./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.0/elasticsearch-analysis-ik-6.8.0.zip

es 命令 查看有哪些分词器 es使用ik分词器查询_es 命令 查看有哪些分词器_02

es 命令 查看有哪些分词器 es使用ik分词器查询_es 命令 查看有哪些分词器_03

2. 重启ElasticSearch

es 命令 查看有哪些分词器 es使用ik分词器查询_分词器_04

3.测试IK安装

GET /_analyze
{
  "text": "中华人民共和国国歌",
  "analyzer": "ik_smart"
}
GET /_analyze
{
  "text": "中华人民共和国国歌",
  "analyzer": "ik_max_word"
}

es 命令 查看有哪些分词器 es使用ik分词器查询_elasticsearch_05

4. 在线安装IK配置文件位置

  • ElasticSearch安装目录中config目录analysis-ik/IKAnalyzer.cfg.xml

②. 本地安装IK

可以将对应的IK分词器下载到本地,然后再安装

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_06

1. 下载IK对应版本上传

可以手动下载再上传,也可以使用wget在线下载,一定要和Elasticsearch版本一致

[es@linux ~]$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_07

2. 解压IK分词器

#先使用yum install -y unzip
[es@linux ~]$ unzip elasticsearch-analysis-ik-6.2.4.zip

es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_08

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_09

3. 移动IK到Elasticsearch安装目录的plugins目录中

es 命令 查看有哪些分词器 es使用ik分词器查询_elasticsearch_10

4. 重启Elasticsearch生效

es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_11


es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_12

5. 本地安装IK配置目录为

本地配置没有在线安装配置目录的优先级高,注意自定义扩展词的时候

  • es安装目录中/plugins/analysis-ik/config/IKAnalyzer.cfg.xml

③. 测试IK分词器

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

  1. ik_max_word: 会将文本做最细粒度的拆分会穷尽各种可能的组合。
  2. ik_smart: 会做最粗粒度的拆分。。
# 13. 多字段分词查询(query_string)

GET /xizi/emp/_search
{
  "query": {
    "query_string": {
      "query": "xizi",
      "analyzer": "ik_max_word", 
      "fields": ["name","id"]
    }
  }
}

es 命令 查看有哪些分词器 es使用ik分词器查询_elasticsearch_13

DELETE /ems

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",
          "search_analyzer": "ik_max_word"
        },
        "address":{
          "type":"keyword"
        }
      }
    }
  }
}

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_14

//文档添加数据
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":"北京"}
// 进行查询
GET /ems/emp/_search
{
  "query":{
    "term":{
      "content":"方方面面"
    }
  },
  "highlight": {
    "pre_tags": ["<span style='color:red'>"],
    "post_tags": ["</span>"],
    "fields": {
      "*":{}
    }
  }
}

es 命令 查看有哪些分词器 es使用ik分词器查询_分词器_15

④. 配置本地扩展词

  • IK支持自定义扩展词典和停用词典。
  • 扩展词典就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典
  • 停用词典就是有些词是关键词,但是出于业务场景不想使用这些关键词被检索到,可以将这些词放入停用词典。
  • 如何定义扩展词典和停用词典可以修改IK分词器中config目录中IKAnalyzer.cfg.xml这个文件。
  • 词典的编码必须为UTF-8,否则无法生效

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_16

1. 修改IKAnalyzer.cfg.xml配置文件

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>

es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_17

2. 在ik分词器目录下config目录中创建ext_dict.dic文件

vim ext_dict.dic 加入扩展词即可

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_18

3. 在ik分词器目录下config目录中创建ext_stopword.dic文件

vim ext_stopword.dic 加入停用词即可

4.重启Elasticsearch生效

es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_19

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_20

5.测试IK自定义扩展词

加入自定义扩展词

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_21

加入自定义停止扩展词

es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_22


加入自定义扩展词之前测试

GET /_analyze
{
  "text": "戏子杠精牛逼事件",
  "analyzer": "ik_max_word"
}

es 命令 查看有哪些分词器 es使用ik分词器查询_es 命令 查看有哪些分词器_23

加入自定义扩展词之后测试

es 命令 查看有哪些分词器 es使用ik分词器查询_elasticsearch_24

④. 配置远程连接扩展词

1. 创建Springboot项目并且创建扩展词文件夹启动项目

配置端口号,项目启动名称,创建webapp目录

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_25

2. 修改IKAnalyzer.cfg.xml配置文件

这里IP地址使用本机的进行测试,ipconfig查看替代 localhost

es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_26

3. 重启Elasticsearch

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_27

4. 测试远程配置文件

配置远程扩展词之前查询

GET /_analyze
{
  "text": "子戏",
  "analyzer": "ik_max_word"
}

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_28


配置远程扩展词之后查询

es 命令 查看有哪些分词器 es使用ik分词器查询_es 命令 查看有哪些分词器_29

测试配置文件添加词,Elasticsearch自动加载关键词

es 命令 查看有哪些分词器 es使用ik分词器查询_es 命令 查看有哪些分词器_30


es 命令 查看有哪些分词器 es使用ik分词器查询_analyzer_31

GET /_analyze
{
  "text": "驴肉火烧",
  "analyzer": "ik_max_word"
}

es 命令 查看有哪些分词器 es使用ik分词器查询_Elastic_32