【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

相关文章

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)