【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

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让

深入浅出Java中的Happens-Before核心规则

《深入浅出Java中的Happens-Before核心规则》本文解析Java内存模型中的Happens-Before原则,解释其定义、核心规则及实际应用,帮助理解多线程可见性与有序性问题,掌握并发编程... 目录前言一、Happens-Before是什么?为什么需要它?1.1 从一个问题说起1.2 Haht

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实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过