当前位置: 首页 > news >正文

ES分布式搜索-IK分词器

ES分词器-IK

1、为什么使用分词器?

es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。

我们在kibana的DevTools中测试:

GET /_analyze
{"analyzer": "ik_max_word","text": "程序员学习java太棒了"
}

语法说明:

  • POST:请求方式

  • /_analyze:请求路径,这里省略了http://192.168.12.131:9200,有kibana帮我们补充

  • 请求参数,json风格:

    • analyzer:分词器类型,这里是默认的standard分词器

    • text:要分词的内容

由于kibana无法识别中文词汇,在没有使用IK分词器的情况下每一个中文会逐字进行识别保存查询,所以对效率和内存的耗损都有一些代价。

处理中文分词,一般会使用IK分词器。IK分词器GitHub官网

安装IK分词器,参考资料《安装elasticsearch.md》:

ik分词器包含两种模式(“analyzer”中添加):

  • ik_smart:最少切分,粒度
  • ik_max_word:最细切分,粒度(分词之后的词语更多)

问题来了,ik分词器是怎样进行分词的?

ik分词器是一种基于字典和规则的中文分词器,其分词过程可以简要描述如下:

  1. 文本预处理:首先将输入的文本进行预处理,包括去除特殊字符、停用词等操作。

  2. 正向最大匹配:ik分词器采用正向最大匹配算法,即从左向右扫描文本,在词典中查找以当前位置开始的最长匹配词。

  3. 词典匹配:ik分词器使用内置的词典来匹配词语。如果当前位置的字符组合在词典中找到了匹配的词语,则将其作为一个词语输出。

  4. 细粒度切分:当出现歧义情况时,ik分词器会根据一定的规则进行细粒度切分,以解决歧义问题。

  5. 返回结果:最终将分词结果返回给用户,用户可以根据需要进行后续的文本处理或分析。

总的来说,ik分词器通过词典匹配和规则处理的方式对中文文本进行分词,以实现对文本的有效切分。

2、ik分词器-拓展和停用词条

假如现在有需求,字典实现个性化设置,比如说不能出现有关政治或国家领导人的关键词汇,过滤黄赌毒等关键词汇等,还有没有意思的词语如“的”等,而且词汇随着时代进步也会产生许多,也需要不含在字典里面。

  1. 要拓展ik分词器的词库,只需要修改一个ik分词器目录中的config目录中的IkAnalyzer.cfg.xml文件:

    image-20240308110308939

    <?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.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">stopword.dic</entry><!--用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    
  2. 然后在名为ext.dicstopword.dic的文件中,添加想要拓展的词语即可(没有记得在config目录下创建):

    曼诺尔
    雷迪亚兹
    白嫖
    
  3. 重启(docker restart es)测试

    GET /_analyze
    {"analyzer": "ik_smart","text": "曼诺尔雷迪亚兹真是个可恶的白嫖的人"
    }
    
    {"tokens" : [{"token" : "曼诺尔","start_offset" : 0,"end_offset" : 3,"type" : "CN_WORD","position" : 0},{"token" : "雷迪亚兹","start_offset" : 3,"end_offset" : 7,"type" : "CN_WORD","position" : 1},{"token" : "真是","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 2},{"token" : "个","start_offset" : 9,"end_offset" : 10,"type" : "CN_CHAR","position" : 3},{"token" : "可恶","start_offset" : 10,"end_offset" : 12,"type" : "CN_WORD","position" : 4},{"token" : "白嫖","start_offset" : 13,"end_offset" : 15,"type" : "CN_WORD","position" : 5},{"token" : "的人","start_offset" : 15,"end_offset" : 17,"type" : "CN_WORD","position" : 6}]
    }
    

相关文章:

ES分布式搜索-IK分词器

ES分词器-IK 1、为什么使用分词器&#xff1f; es在创建倒排索引时需要对文档分词&#xff1b;在搜索时&#xff0c;需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。 我们在kibana的DevTools中测试&#xff1a; GET /_analyze {"analyzer": "…...

基于卷积神经网络的野外可食用植物分类系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的可食用植物图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入迁移学习模型…...

Raingad IM即时聊天/即时通讯网站源码,附带系统搭建教程

支持功能 支持单聊和群聊&#xff0c;支持发送表情、图片、语音、视频和文件消息单聊支持消息已读未读的状态显示&#xff0c;在线状态显示群聊创建、删除和群成员管理、群公告、群禁言等支持置顶联系人&#xff0c;消息免打扰&#xff1b;支持设置新消息声音提醒&#xff0c;…...

for语句的实际应用(3)

3145&#xff1a;【例24.3】 奇数求和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9847 通过数: 5442 【题目描述】 计算非负整数 m 到 n&#xff08;包括 m 和 n&#xff09;之间的所有奇数的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且 n 不大…...

c++ Windows获取软件安装列表信息

链接 #include <windows.h> #include <stdio.h> #include <iostream> #include <vector>using namespace std;#ifndef MSVCR #define _T #define _tcscpy strcpy #define _stprintf sprintf #define _tcscmp strcmp #endifclass SetupSoftInfo { publ…...

音视频学习笔记——c++多线程(一)

✊✊✊&#x1f308;大家好&#xff01;本篇文章主要整理了部分多线程相关的内容重点&#x1f607;。首先讲解了多进程和多线程并发的区别以及各自优缺点&#xff0c;之后讲解了Thead线程库的基本使用。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统…...

消息队列常见问题

总的来讲&#xff0c;消息队列常见问题要么消息不能多&#xff0c;要么不能少&#xff0c;还有顺序性&#xff0c;以及积压处理的问题等。 1.消息不能多 也就是说&#xff0c;消息不能重复消费&#xff0c;随之带来的幂等性问题。 解决&#xff1a;一般结合业务场景&#xf…...

【leetcode热题】二叉树的前序遍历

难度&#xff1a; 中等通过率&#xff1a; 49.5%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个二叉树&#xff0c;返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1\2/3 输出: [1,2,3]进阶: 递归算法很简单&#xff0c;你可以通过迭代…...

Linux命令记不住?保姆级教程来了

在软件开发过程中&#xff0c;Linux操作系统因其稳定性、安全性和高效性而备受青睐。作为开发者&#xff0c;熟练掌握Linux常用命令&#xff0c;不仅可以提高工作效率&#xff0c;还能更好地管理服务器和进行代码部署。本文将介绍一些开发常用的Linux命令及其应用场景&#xff…...

基于GitBucket的Hook构建ES检索PDF等文档全栈方案

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo&#xff0c;预期建设方案是使用触发器类型从公共的文档源拉取最新的文件&#xff0c;然后调用Java将文件转Base64后入ES建索引&#xff0c;再提供封装接口给前端做查询之用。 由于全部内容过长&#xff…...

C语言:数组、字符串知识点整理:

数组&#xff1a;&#xff08;长度的计算&#xff09; 补充&#xff1a;数组长度sizeof(arr)/sizeof(arr[0]) 注意&#xff1a;&#xff01;&#xff01;&#xff01;不适用于当arr 充当形参时&#xff08;函数传参&#xff09;&#xff01;&#xff01;&#xff01; 因为函数…...

Linux mmap系统调用

文章目录 前言一、mmap()函数简介二、代码演示2.1 mmap使用场景2.2 私有匿名映射2.3 私有文件映射2.4 共享匿名映射2.5 共享文件映射 参考 前言 NAMEmmap, munmap - map or unmap files or devices into memorySYNOPSIS#include <sys/mman.h>void *mmap(void *addr, siz…...

VSCode搭建ARM开发环境

为了构建Cortex M系列单片机免费开源的开发环境&#xff0c;网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式&#xff0c;下面记录环境搭建的流程。 我这边的PC环境为 WIN7专业版64bit。 需要用到的工具 Visual Studio CodeSTM32CubemxARM GCC 交叉编译工具链&#x…...

centos7 python3.12.1 报错 No module named _ssl

https://blog.csdn.net/Amio_/article/details/126716818 安装python cd /usr/local/src wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz tar -zxvf Python-3.12.1.tgz cd Python-3.12.1/ ./configure -C --enable-shared --with-openssl/usr/local/opens…...

探索HTTP协议:网络通信的基石

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

几大开源免费的 JavaScript 富文本编辑器测评

MarkDown 编辑器用的时间长了&#xff0c;发现发现富文本编辑器用起来是真的舒服。 一直以来写博客都是用的 MarkDown 编辑器&#xff0c;MarkDown 文档简单方便&#xff0c;使用几个简单的符号就可以定义出样式统一的富文本内容。写博客的时间长了&#xff0c;小玖就越来越排…...

MongoDB聚合运算符:$dateFromString

文章目录 语法使用使用例子对规则进行说明格式指示符 举例日期转换错误处理onError空值的粗粒 onNull $dateFromString聚合运算符将日期时间字符串转换为日期对象。 语法 { $dateFromString: {dateString: <dateStringExpression>,format: <formatStringExpression&g…...

Postman(注册,使用,作用)【详解】

目录 一、Postman 1. Postman介绍 2. 安装Postman 3. 注册帐号再使用(可保存测试记录) 4. 创建workspace 5. 测试并保存测试记录 一、Postman postman工具可以发送不同方式的请求,浏览器只能发送get请求(所有用这个工具) 在前后端分离开发模式下&#xff0c;前端技术人员…...

电商数据分析18——电商广告投放的数据分析与优化

目录 写在开头1. 电商广告投放的挑战与机遇1.1 广告投放的主要目标与挑战1.2 广告数据分析的价值 2. 数据分析在广告投放中的应用2.1 目标受众分析与精准定位2.2 广告效果评估与ROI分析2.3 A/B测试与广告内容优化 3. 广告投放优化的实践案例3.1 案例分享&#xff1a;精准定向提…...

Docker下Jenkins打包java项目并部署

docker 构建Jenkins sudo docker run --namezen_haslett --userjenkins --privilegedtrue --volume/home/cyf/server/jenkins/jenkins_home:/var/jenkins_home -v /usr/lib/jvm/java-17-openjdk-amd64:/usr/lib/jvm/java-17-openjdk-amd64 -v /usr/lib/maven/apache-mav…...

百度网盘SVIP破解终极指南:macOS免费解锁高速下载完整教程

百度网盘SVIP破解终极指南&#xff1a;macOS免费解锁高速下载完整教程 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版的龟速下载而…...

拆解手机耳机孔:ECM麦克风、ACCDET检测与CODEC连接的完整信号链路分析

手机耳机孔信号链路全解析&#xff1a;从ECM麦克风到CODEC的精密协作 当我们将一副耳机插入手机时&#xff0c;这个看似简单的动作背后隐藏着一套精密的电子系统协同工作。从耳机插头的物理接触到最终声音信号的数字处理&#xff0c;整个链路涉及检测、供电、信号调理等多个关键…...

SQL左连接查询结果为NULL怎么办_使用ISNULL函数替换空值技巧

LEFT JOIN 后字段为 NULL 是因右表无匹配行或连接条件不满足&#xff1b;ISNULL 为 SQL Server 特有、仅两参数且类型继承易截断&#xff0c;COALESCE 为标准函数、多参数且类型推导严谨&#xff1b;WHERE 中误写右表条件会使 LEFT JOIN 退化为 INNER JOIN&#xff1b;NULL 参与…...

别再手动调Anchor了!用YOLOv5自带的K-means+遗传算法,为你的数据集定制最佳Anchor Box

告别手动调参&#xff1a;YOLOv5自动Anchor优化全攻略 在目标检测领域&#xff0c;Anchor Boxes的设置一直是影响模型性能的关键因素。传统方法依赖人工经验或反复试错&#xff0c;不仅耗时耗力&#xff0c;还难以达到最优效果。YOLOv5框架内置的K-means聚类与遗传算法组合方案…...

告别手动签到:青龙面板自动化签到工具完全指南

告别手动签到&#xff1a;青龙面板自动化签到工具完全指南 【免费下载链接】check 青龙面板平台签到函数 项目地址: https://gitcode.com/gh_mirrors/check5/check 每天打开十几个APP&#xff0c;重复点击签到按钮&#xff0c;只为获取那一点点积分和奖励——你是不是也…...

华为OD机试真题 新系统-8位LED控制器(C/C++/Py/Java/Js/Go)

8位LED控制器 华为OD机试真题 华为OD上机考试真题 4月19号 100分题型 华为OD机试真题目录点击查看: 华为OD机试真题题库目录&#xff5c;机考题库 算法考点详解 题目描述 有一个8位LED控制器&#xff0c;包含8个LED灯(编号0-7)&#xff0c;初始状态全灭&#xff0c;用8位二…...

第三章:生活中的数据现象

上一章节我们为大家揭开了“数据分析师”的神秘面纱&#xff0c;文章结尾我们聊到了一个很有意思的观点&#xff1a;买菜虽然用不到微积分&#xff0c;但如果你懂一点数据逻辑&#xff0c;你就能立刻知道某一价格的菜到底是买贵了&#xff0c;还是捡了便宜。 很多人觉得&#x…...

从零到一:深入浅出分布式锁原理与Spring Boot实战(Redis + ZooKeeper)

一、为什么需要分布式锁&#xff1f;——从单机到分布式的必然选择1.1 单机锁的局限性在传统单体架构中&#xff0c;我们习惯使用 synchronized、ReentrantLock 等同步机制来控制并发访问。但这些锁机制存在致命缺陷&#xff1a;仅限于单 JVM&#xff1a;只能锁住同一个 Java 虚…...

3步搞定顽固窗口:WindowResizer 窗口强制调整工具完全指南

3步搞定顽固窗口&#xff1a;WindowResizer 窗口强制调整工具完全指南 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否遇到过那些无法正常拖拽大小的应用程序窗口&#xff1…...

STC32G12K128开发板CAN通信实战:从硬件连接到Keil C251程序调试(附源码)

STC32G12K128开发板CAN通信全流程实战指南 1. 硬件准备与环境搭建 拿到STC32G12K128开发板的第一件事&#xff0c;就是检查配件是否齐全。除了开发板本体&#xff0c;你还需要准备以下硬件&#xff1a; CAN转TTL模块&#xff1a;这是连接开发板与CAN总线的关键桥梁&#xff0c;…...