【HBZ分享】ES分词器的拆分规则 及 算法

2023-11-01 09:28

本文主要是介绍【HBZ分享】ES分词器的拆分规则 及 算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ES分词器种类

  1. 常见的分词器,如Standard分词器、Simple分词器、Whitespace分词器、IK分词等,还支持自定义分词器(比如一些小国家的语言需要自定义分词器)
  2. ES默认就是Standard分词器

分词器在分词时的过程

  1. 标记化:分词器第一步是将文本拆分成单个标记(tokens), 就是单个的单词或中文词组,这个标记可以是单词,数组,特殊字符,中文词语等。 此时会包含一些分隔符,标点,停用词等,并非最终形态的分词。
  2. 过滤:对第一步分出来的所有标记进行过滤操作,比如大小写转换,去除停用词,去掉分隔符标点等操作,形成最终形态的分词集
  3. 倒排索引:分词完成后,ES会创建倒排索引来存储这些分词, 倒排索引是一种数据结构,通过倒排索引,把分词和文档document(即原始文本)建立起映射关系,当搜索某个分词的时候,就会将映射到的文档进行返回。
  4. 查询匹配:查询时我们输入的文本内容,也会在ES进行分词处理,将搜索内容分词后,拿着分词去倒排索引中进行查询,把匹配到的分词对应的映射document进行返回。

Standard分词器的规则

  1. 标点符号切分:如果文本中含有标点符号,那么会根据标点符号进行拆分,比如apple,peach,food。那么拆分结果就是[apple 和 peach 和 food]这3个,会根据逗号拆分
  2. 词分割: 即按照空格进行拆分, 比如: my name is hbz, 拆分结果就是[my 和 name 和 is 和 hbz]这4个词拆成独立的分词
  3. 小写转换:即会将文本中的大小写全部转成小写, 比如Hellow World, 则拆分结果就是[hellow 和 world], 首字母的H,W都会转成小写的h, w
  4. 停用词过滤: 过滤掉无效的单词,比如a, an, the这种连接词,这些词本身没啥意义,做分词的时候Standard分词器会将这些排除
  5. 词干提取:将单词还原成原始形态, 比如 running–>run, swimming–>swid, going–>go, jumped–>jump
  6. ==注意:以上这5个特点是同时生效的,即一段文本会按照这5中规则进行分词,最终结果一定是符合这5中规则的。 ==

如何查看ES分词存储效果?

GET /索引名称/_analyze
GET /_index/_analyze
{"analyzer": "分词器名称","field": "字段名称""text": "待分析的文本"
}

案例:

#字段是text类型
POST /my_index/_analyze
{"field": "title","text": "This is some text to analyze"
}#字段是text类型
POST /my_index/_analyze
{"field": "title","text": "今天学习了编程知识"
}#字段是keyword类型(keyword是精确匹配,所以不会进行分词,This is some text to analyze作为一个完整体)
POST /my_index/_analyze
{"field": "tags","text": "This is some text to analyze"
}#字段是keyword类型(这是数组的keyword,会将数组的每个元素进行分离出来,但每个元素不会再进行分词了,即结果就是This is, java, Spring Boot。大小写也不会转换,因为根本没走分词器) 
POST /my_index/_analyze
{"field": "tags","text": ["This is","java","Spring Boot" ]
}

这篇关于【HBZ分享】ES分词器的拆分规则 及 算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322040

相关文章

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.