白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库

20190806092132811.jpg


概述

继续跟中华石杉老师学习ES,第29篇

课程地址: https://www.roncoo.com/view/55


ik配置文件

配置文件位置: ${ES_HOME}/plugins/ik/config/IKAnalyzer.cfg.xml


20190810233021208.png


IKAnalyzer.cfg.xml:


20190811203034426.png


这里使用的是6.4.1版本对应的ik分词器,可以看到 配置文件中 ext_dict和ext_stopwords 默认是空的,如果需要的话,我们可以修改该配置项。


几个配置文件的作用


IKAnalyzer.cfg.xml:用来配置自定义词库


main.dic:ik原生内置的中文词库,总共有27万多条,只要是这些单词,都会被分在一起


quantifier.dic:存放了一些单位相关的词


suffix.dic:存放了一些后缀


surname.dic:中国的姓氏


stopword.dic:英文停用词


最常用的两个


main.dic:包含了原生的中文词语,会按照这个里面的词语去分词,只要是这些单词,都会被分在一起

stopword.dic:包含了英文的停用词 ( 停用词 stop word ,比如 a 、the 、and、 at 、but 等 . 通常像停用词,会在分词的时候,直接被干掉,不会建立在倒排索引中 )



IK自定义词库


自定义词库


有一些特殊的流行词,一般不会在ik的原生词典main.dic里。

举个例子,比如2019年很火的 “盘他”,我们到原生词典main.dic中去查找下看看


20190811212410115.png


这个时候,我们用ik的ik_max_word分词器来查下分词

GET _analyze
{
  "text": ["盘他","杠精","脱粉"],
  "analyzer": "ik_max_word"
}


返回

{
  "tokens": [
    {
      "token": "盘",
      "start_offset": 0,
      "end_offset": 1,
      "type": "CN_CHAR",
      "position": 0
    },
    {
      "token": "他",
      "start_offset": 1,
      "end_offset": 2,
      "type": "CN_CHAR",
      "position": 1
    },
    {
      "token": "杠",
      "start_offset": 3,
      "end_offset": 4,
      "type": "CN_CHAR",
      "position": 2
    },
    {
      "token": "精",
      "start_offset": 4,
      "end_offset": 5,
      "type": "CN_CHAR",
      "position": 3
    },
    {
      "token": "脱",
      "start_offset": 6,
      "end_offset": 7,
      "type": "CN_CHAR",
      "position": 4
    },
    {
      "token": "粉",
      "start_offset": 7,
      "end_offset": 8,
      "type": "CN_CHAR",
      "position": 5
    }
  ]
}


可以看到使用ik的 ik_max_word分词器还是将每个汉字作为一个term , 这个时候去使用这些词语去搜索,效果肯定不是很理想。


Step1 : 新建自定义分词库

我们这里新建个目录 custom , 在该目录下新建一个文件: artisan.dic


20190811220239831.png


将希望不分词的词语放到该文件中,比如

盘他
杠精
脱粉



20190811220348118.png


Step2 : 添加到ik的配置文件中


在 ext_ditc节点 添加自定义的扩展字典 , ik本身提供的 extra_main.dic 词语更加丰富,这里我们也添加进去吧


20190811220456459.png


Step3 :重启es ,查看分词

重启es

GET _analyze
{
  "text": ["盘他","杠精","脱粉"],
  "analyzer": "ik_max_word"
}


返回

{
  "tokens": [
    {
      "token": "盘他",
      "start_offset": 0,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "盘",
      "start_offset": 0,
      "end_offset": 1,
      "type": "CN_WORD",
      "position": 1
    },
    {
      "token": "他",
      "start_offset": 1,
      "end_offset": 2,
      "type": "CN_CHAR",
      "position": 2
    },
    {
      "token": "杠精",
      "start_offset": 3,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 3
    },
    {
      "token": "脱粉",
      "start_offset": 6,
      "end_offset": 8,
      "type": "CN_WORD",
      "position": 4
    }
  ]
}


可以看到,和未添加自定义词典相比,已经可以按照自己指定的规则进行分词了。


自定义停用词库


比如了,的,啥,么,我们可能并不想去建立索引,让人家搜索

可以看到

  • stopword.dic 中是 英文 停用词
  • extra_stopword.dic 中文停用词


20190811221112195.png

验证下分词

GET _analyze
{
  "text": ["啥类型"],
  "analyzer": "ik_max_word"
}

返回

{
  "tokens": [
    {
      "token": "啥",
      "start_offset": 0,
      "end_offset": 1,
      "type": "CN_CHAR",
      "position": 0
    },
    {
      "token": "类型",
      "start_offset": 1,
      "end_offset": 3,
      "type": "CN_WORD",
      "position": 1
    },
    {
      "token": "类",
      "start_offset": 1,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "型",
      "start_offset": 2,
      "end_offset": 3,
      "type": "CN_CHAR",
      "position": 3
    }
  ]
}

20190811221203845.png


可以看到 “啥”是建立了倒排索引的。那我们下面来将 “啥”添加到自定义的停用词里,来验证下吧。


Step1 : 新建自定义停用词词典

我们在新建的目录 custom , 在该目录下新建一个文件: artisan_stopword.dic , 添加停用词

20190811222843997.png


Step2 : 添加到ik的配置文件中

在 ext_stopwords节点 添加自定义的停用词扩展字典 , ik本身提供的 extra_stopword.dic 这里我们也添加进去吧


20190811222942766.png

Step3 : 重启es ,查看停用词

重启es ,验证停用词

GET _analyze
{
  "text": ["啥类型"],
  "analyzer": "ik_max_word"
}


返回

{
  "tokens": [
    {
      "token": "类型",
      "start_offset": 1,
      "end_offset": 3,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "类",
      "start_offset": 1,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 1
    },
    {
      "token": "型",
      "start_offset": 2,
      "end_offset": 3,
      "type": "CN_CHAR",
      "position": 2
    }
  ]
}



20190811222524392.png


可以看到 “啥”已经不会在倒排索引中了,自定义停用词功能成功。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
63 5
|
1月前
|
自然语言处理 Java 网络架构
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
这篇文章是关于如何自定义Elasticsearch的ik分词器配置以满足特定的中文分词需求。
127 0
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
|
23天前
|
测试技术 API 开发工具
ElasticSearch的IK分词器
ElasticSearch的IK分词器
43 7
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
124 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
2月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
3月前
|
自然语言处理 应用服务中间件 nginx
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
这篇文章是关于如何在Elasticsearch中安装和使用ik分词器的详细教程,包括版本匹配、安装步骤、分词测试、自定义词库配置以及创建使用ik分词器的索引的方法。
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
3月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
56 0
|
11天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
29 5
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo