ElasticSearch系列(四)ES集成IK分词器以及使用方式

2023-10-29

ES的分词器会把我们查询使用的字符串进行分词,同时也会把要查询的目标数据进行分词,然后进行匹配。

一、标准分词器

ES默认自带的分析器,是标准分词器,针对英文好使,但是针对中文,只能把汉字一个个拆分,不符合中文插叙需求。

我们测试下标准分词器,看看标准分词器如何处理 “正在学习elastic search” 这个字符串:
在这里插入图片描述

{
    "tokens": [
        {
            "token": "正",
            "start_offset": 0,
            "end_offset": 1,
            "type": "<IDEOGRAPHIC>",
            "position": 0
        },
        {
            "token": "在",
            "start_offset": 1,
            "end_offset": 2,
            "type": "<IDEOGRAPHIC>",
            "position": 1
        },
        {
            "token": "学",
            "start_offset": 2,
            "end_offset": 3,
            "type": "<IDEOGRAPHIC>",
            "position": 2
        },
        {
            "token": "习",
            "start_offset": 3,
            "end_offset": 4,
            "type": "<IDEOGRAPHIC>",
            "position": 3
        },
        {
            "token": "elastic",
            "start_offset": 4,
            "end_offset": 11,
            "type": "<ALPHANUM>",
            "position": 4
        },
        {
            "token": "serach",
            "start_offset": 12,
            "end_offset": 18,
            "type": "<ALPHANUM>",
            "position": 5
        }
    ]
}

可以看出标准分词器处理英文还可以,但是处理中文,结果并不理想,所以我们需要IK分词器。

二、IK分词器

IKAnalyzer是一个开源的,基于java开发的轻量级的中文分词工具包。ES默认没有携带IK分词器,需要下载,下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases

2.1 下载安装

1.下载IK压缩包,本文使用ES是7.3.0,下载的IK也是7.3.0;
2.解压放到es安装目录中的plugin目录中,随便创建的文件目录,
在这里插入图片描述
3.重启es即可

2.2 测试效果

IK分词器,支持两种算法。分别为:

  • ik_smart :最少切分
  • ik_max_word :最细粒度切分

下面看效果,还是测试 “正在学习elastic search” 这个字符串。

1.ik_smart
在这里插入图片描述

{
    "tokens": [
        {
            "token": "正在",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "学习",
            "start_offset": 2,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "elastic",
            "start_offset": 4,
            "end_offset": 11,
            "type": "ENGLISH",
            "position": 2
        },
        {
            "token": "serach",
            "start_offset": 12,
            "end_offset": 18,
            "type": "ENGLISH",
            "position": 3
        }
    ]
}

2.ik_max_word
在这里插入图片描述

{
    "tokens": [
        {
            "token": "正在",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "在学",
            "start_offset": 1,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "学习",
            "start_offset": 2,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "elastic",
            "start_offset": 4,
            "end_offset": 11,
            "type": "ENGLISH",
            "position": 3
        },
        {
            "token": "serach",
            "start_offset": 12,
            "end_offset": 18,
            "type": "ENGLISH",
            "position": 4
        }
    ]
}

对比结果,就能看出ik_max_word和 ik_smart 算法的区别,ik_max_word分出的词数更多更细一些。

2.3 自定义词库

我们分词“最好听的歌”这个字符串,结果如下

{
	"analyzer":"ik_smart",
	"text":"最好听的歌"	
}
输出:
{
    "tokens": [
        {
            "token": "最好",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "听的歌",
            "start_offset": 2,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 1
        }
    ]
}

我们想要“最好听的歌”为一个完整的词,但是结果并没有,这个时候需要我们去词库添加这个词。

1.在es的插件目录中,我们添加了IK分词器,在分词器目录下,有个config目录,

/plugins/ik/config

在congif中,添加一个mydic.dic的文件,名字随意,后缀为dic;

2.在mydic.dic文件中添加词汇:

最好听的歌

3.保存后,修改在ik/config目录的IKAnalyzer.cfg.xml文,内容:
在这里插入图片描述
4.重启es;如果是es集群,每个节点都需要改;

测试下:

ik_smart:

{
	"analyzer":"ik_smart",
	"text":"最好听的歌"	
}
输出:
{
    "tokens": [
        {
            "token": "最好听的歌",
            "start_offset": 0,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 0
        }
    ]
}

ik_max_word:

{
	"analyzer":"ik_max_word",
	"text":"最好听的歌"	
}
输出:
{
    "tokens": [
        {
            "token": "最好听的歌",
            "start_offset": 0,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "最好",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "好听",
            "start_offset": 1,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "听的歌",
            "start_offset": 2,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 3
        }
    ]
}

发现,都有“最好听的歌”这个词了。

本文就先到这里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch系列(四)ES集成IK分词器以及使用方式 的相关文章

随机推荐

  • 【C语言基础】顺序表、链表

    文章目录 一 线性表 1 线性表定义 2 顺序表 2 1 插入操作 2 2 删除操作 2 3 查找操作 二 单链表 1 头插法创建链表 1 1 代码实现 2 尾插法创建链表 2 1 代码实现 3 查找操作 3 1 按值查找 3 2 按位查找
  • 【CTF】端口扫描教程

    学习目的 熟悉TCP UDP协议基础 掌握nmap扫描原理 能够使用命令行与图形界面进行信息收集 熟练使用nmap常用参数对不同网络环境进行端口扫描 并通过扫描结果对目标进行分析 预备知识 TCP与UDP TCP是一种面向连接 连接导向 的
  • Angular6 和 RXJS6 的一些改动

    例一 import Injectable from angular core import Observable from rxjs import User from model User import map from rxjs oper
  • [JavaEE系列] 详解多线程中的CAS及其ABA问题

    文章目录 说在前面 什么是CAS CAS典型的应用场景 1 使用CAS实现原子类 2 使用CAS实现自旋锁 CAS的ABA问题 1 一个ABA问题的例子 2 ABA问题导致出现的BUG 3 ABA问题的解决方案 说在前面 本篇文章是基于前面
  • 详解谷歌最强NLP模型BERT(理论+实战)

    作者 李理 环信人工智能研发中心vp 十多年自然语言处理和人工智能研发经验 主持研发过多款智能硬件的问答和对话系统 负责环信中文语义分析开放平台和环信智能机器人的设计与研发 本文是作者正在编写的 深度学习理论与实战 的部分内容 导语 Goo
  • 电动汽车整车动力参数匹配app。 电机外特性曲线绘制 集成matlab界面小程序

    电动汽车整车动力参数匹配app 电机外特性曲线绘制 集成matlab界面小程序 内容 已知电动汽车整车参数 求解电机主要工作点 并绘制外特性曲线 包括 界面和带可编辑源码 2019版以上打开 推出的App 后期替换GUI功能 另外程序描述比
  • Cocos2dx-demo演示项目:Part1

    这个项目 我主要是用来积累 记录自己在利用cocos2dx引擎进行项目开发 学习实践中的开发经验 每天的开发任务 查看别人分享的内容 总是能够收获到可取的东西 将这些可取的东西自己再着手开发一次 能够进一步深刻理解这些 同时今后如果碰到类似
  • Caocao's Bridges 【HDU - 4738】【Tarjan求桥(割边)】

    题目链接 在赤壁之战中 曹操被诸葛亮和周瑜击败 但他不会放弃 曹操的军队仍然不善于水战 所以他提出了另一个想法 他在长江建造了许多岛屿 在这些岛屿的基础上 曹操的军队很容易攻击周瑜的部队 曹操还建造了连接岛屿的桥梁 如果所有岛屿都通过桥梁相
  • 生命在于折腾——SQL注入的实操(六)less26-30

    一 实操环境 1 操作系统 VMware虚拟机创建的win10系统 内存8GB 硬盘255GB 处理器AMD Ryzen 9 5900HX 2 操作项目 sql lib项目 本篇文章介绍关卡26 30 3 工具版本 phpstudy 8 1
  • windows7 64位机上CUDA7.0配置及在VS2010中的简单使用举例

    1 查看本机配置 查看显卡类型是否支持NVIDIA GPU 选中计算机 gt 右键属性 gt 设备管理器 gt 显示适配器 NVIDIA GeForce GT 610 从https developer nvidia com cuda gpu
  • OpenCV常见算法实现(一)- 椒盐噪声

    椒盐噪声的实现非常简单 原理就是把一幅图像里面的像素随机变成黑色或者白色 所以椒盐名字就是这么来的 先看代码 int noise coeff 5 for int k 0 k lt image rows image cols k int j
  • YOLOv8遇见VisDrone 2023目标检测挑战赛-YOLOv8实战VisDrone无人机目标检测(视频教程)

    课程链接 https edu csdn net course detail 38688 VisDrone 2023目标检测挑战赛 http aiskyeye com challenge 2023 和 ICCV 2023 顶会联合举行 用于检
  • 只需5步 真·双开电脑版微信

    最近发现 有些小伙伴不仅有双开手机版微信的需求 同时也有电脑版的需求 今天教大家一个方法 简单好用 只需要跟着图片操作 5步即可 快一起来试试吧 1 下载安装ProcessExplorer 2 右键以管理员身份运行procexp exe 3
  • 关于产品MVP的定义与实践

    MVP是什么 MVP minimum viable product 最小化可行产品 概念最早由埃里克 莱斯提出 刊载于哈弗商业评论 并有出版物 精益创业 作用 MVP是进行一种小样调研 快速进入市场 接触客户并得到反馈 透过反馈不断修改原型
  • 数据库的可用监控

    监控 数据库是否连接和读写以及数据库的连接数 1 确认数据库是否可以通过网络连接 造成连接不成功的原因 防火墙 TCP IP连接被占满 监控的方式 1 mysqladmin u 监控用户 p 密码 h 监控的服务器地址 ping 首先我们在
  • C/C++宏定义中的#

    在C C 中 宏定义是由define完成的 define中有三个特殊的符号值得我们注意 1 在宏展开的时候会将 后面的参数替换成字符串 如 define p exp printf exp 调用p asdfsadf 的时候会将 exp换成 a
  • Hive 安装、配置、数据导入和使用

    Hive 安装 配置 数据导入和使用 Hive 下载 Hive 的环境 Hive 配置 Hive 数据导入 总结 Hive 下载 首先到Apache Hive TM下载软件 随便写一个 都比较慢 下载二进制文件 Hive 的环境 首先将下载
  • 算法-暴力递归

    暴力递归 public class HanNuoTa public static void hannuo int n if n gt 0 function n 左 右 中 public static void function int i
  • LeetCode题目笔记--7.整数反转

    题目描述 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的有
  • ElasticSearch系列(四)ES集成IK分词器以及使用方式

    文章目录 一 标准分词器 二 IK分词器 2 1 下载安装 2 2 测试效果 2 3 自定义词库 ES的分词器会把我们查询使用的字符串进行分词 同时也会把要查询的目标数据进行分词 然后进行匹配 一 标准分词器 ES默认自带的分析器 是标准分