Elasticsearch-分词器详解
什么是分词器
1、分词器介绍 对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。
常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart;英文分词器standard
ik_max_word会将文本做最细粒度的拆分,会穷尽各种可能的组合,适合 Term Query;
ik_smart:会做最粗粒度的拆分,适合 Phrase 查询
下面是对分词器使用的语句:
GET _analyze
{"text": ["布布努力学习编程"],"analyzer": "ik_max_word"
}
{"tokens" : [{"token" : "布","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "布","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "努力学习","start_offset" : 2,"end_offset" : 6,"type" : "CN_WORD","position" : 2},{"token" : "努力","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 3},{"token" : "力学","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 4},{"token" : "学习","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 5},{"token" : "编程","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 6}]
}GET _analyze
{"text": ["布布努力学习编程"],"analyzer": "ik_smart"
}
{"tokens" : [{"token" : "布","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "布","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "努力学习","start_offset" : 2,"end_offset" : 6,"type" : "CN_WORD","position" : 2},{"token" : "编程","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 3}]
}GET _analyze
{"text": ["布布努力学习编程"],"analyzer": "standard"
}
{"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" : "学","start_offset" : 4,"end_offset" : 5,"type" : "<IDEOGRAPHIC>","position" : 4},{"token" : "习","start_offset" : 5,"end_offset" : 6,"type" : "<IDEOGRAPHIC>","position" : 5},{"token" : "编","start_offset" : 6,"end_offset" : 7,"type" : "<IDEOGRAPHIC>","position" : 6},{"token" : "程","start_offset" : 7,"end_offset" : 8,"type" : "<IDEOGRAPHIC>","position" : 7}]
}
分词器的生效时间
- 在创建索引的时候会把索引中text类型的字段按照mapping中配置的分词器进行分词存储倒排索引;
- 在查询的时候全文检索,会对搜索条件进行分词做为查询条件去和创建索引时的分词匹配;
分词器的组成
切词器(Tokenizer):用于定义切词(分词)逻辑
词项过滤器(Token Filter):用于对分词之后的单个词项的处理逻辑
字符过滤器(Character Filter):用于处理单个字符
注意:分词器不会对源数据产生影响,分词只是对倒排索引以及搜索词的行为
字符过滤器(Character Filter)
定义:分词之前的预处理,过滤无用字符
字符过滤器分为三种:
字符过滤器-HTML标签过滤器:HTML Strip Character Filter
过滤html标签
html_strip
参数:escaped_tags 需要保留的html标签
“type”: “html_strip”
DELETE test_html_strip_filter
#字符过滤器
PUT test_html_strip_filter
{"settings": {"analysis": {"char_filter": {"my_char_filter": {"type": "html_strip","escaped_tags": ["a"]}}}}
}GET test_html_strip_filter/_analyze
{"tokenizer": "standard","char_filter": ["my_char_filter"],"text": ["<p>I'm so <a>happy</a>!</p>"]
}结果:
{"tokens" : [{"token" : "I'm","start_offset" : 3,"end_offset" : 11,"type" : "<ALPHANUM>","position" : 0},{"token" : "so","start_offset" : 12,"end_offset" : 14,"type" : "<ALPHANUM>","position" : 1},{"token" : "a","start_offset" : 16,"end_offset" : 17,"type" : "<ALPHANUM>","position" : 2},{"token" : "happy","start_offset" : 18,"end_offset" : 23,"type" : "<ALPHANUM>","position" : 3},{"token" : "a","start_offset" : 25,"end_offset" : 26,"type" : "<ALPHANUM>","position" : 4}]
}
上面语句的作用是:对text文本,只保留标签,其余标签不展示
字符过滤器-字符映射过滤器:Mapping Character Filter
通过在索引的mapping映射中指定对某些字符的替换从而完成特定字符的过滤
“type”:“mapping”
##Mapping Character Filter
DELETE my_index
PUT my_index
{"settings": {"analysis": {"char_filter": {"my_char_filter":{"type":"mapping","mappings":["臭 => *","傻=> *","逼=> *"]}},"analyzer": {"my_analyzer":{"tokenizer":"keyword","char_filter":["my_char_filter"]}}}}
}
GET my_index/_analyze
{"analyzer": "my_analyzer","text": "你就是个臭傻逼"
}{"tokens" : [{"token" : "你就是个***","start_offset" : 0,"end_offset" : 7,"type" : "word","position" : 0}]
}
字符过滤器-正则替换过滤器:Pattern Replace Character Filter
“type”:"pattern_replace"表示正则替换
##Pattern Replace Character Filter
#17611001200
DELETE my_index
PUT my_index
{"settings": {"analysis": {"char_filter": {"my_char_filter":{"type":"pattern_replace","pattern":"(\\d{3})\\d{4}(\\d{4})","replacement":"$1****$2"}},"analyzer": {"my_analyzer":{"tokenizer":"keyword","char_filter":["my_char_filter"]}}}}
}
GET my_index/_analyze
{"analyzer": "my_analyzer","text": "您的手机号是17611001200"
}{"tokens" : [{"token" : "您的手机号是184****6831","start_offset" : 0,"end_offset" : 17,"type" : "word","position" : 0}]
}
词项过滤器(Token Filter)
词项过滤器用来处理切词完成之后的词项,例如把大小写转换,删除停用词或同义词处理等。官方同样预置了很多词项过滤器,基本可以满足日常开发的需要。当然也是支持第三方也自行开发的。
standard转大小写、停用词
#转为大写
GET _analyze
{"tokenizer": "standard", "filter": ["uppercase"],"text": ["www elastic co guide"]
}#转为小写
GET _analyze
{"tokenizer": "standard","filter": ["lowercase"],"text": ["WWW ELASTIC CO GUIDE"]
}
停用词
在切词完成之后,会被干掉词项,即停用词。停用词可以自定义
在分词器插件的配置文件中可以看到停用词的定义
GET _analyze
{"tokenizer": "standard","filter": ["stop"], "text": ["what are you doing"]
}
这是IK分词器的停用词
自定义停用词
### 自定义 filter
PUT test_token_filter_stop
{"settings": {"analysis": {"filter": {"my_filter": {"type": "stop","stopwords": ["www"],"ignore_case": true}}}}
}
GET test_token_filter_stop/_analyze
{"tokenizer": "standard", "filter": ["my_filter"], "text": ["What www WWW are you doing"]
}
同义词
#同义词
PUT test_token_filter_synonym
{"settings": {"analysis": {"filter": {"my_synonym": {"type": "synonym","synonyms": ["good, nice => excellent"]}}}}
}GET test_token_filter_synonym/_analyze
{"tokenizer": "standard", "filter": ["my_synonym"], "text": ["good"]
}
切词器:Tokenizer
tokenizer 是分词器的核心组成部分之一,其主要作用是分词,或称之为切词。主要用来对原始文本进行细粒度拆分。拆分之后的每一个部分称之为一个 Term,或称之为一个词项。可以把切词器理解为预定义的切词规则。官方内置了很多种切词器,默认的切词器为 standard。
相关文章:

Elasticsearch-分词器详解
什么是分词器 1、分词器介绍 对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。 常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart&…...

Android-相对布局RelativeLayout
相对布局在摆放子视图位置时,按照指定的参考系来摆放子视图的位置,默认以屏幕左上角(0,0)位置作为参考系摆放位置 了解一下接下来都会以代码的方式可视化出来 属性 可选值 说明 layout_alignParentTop true/false 是否让控件相对于父容器顶部对齐 …...
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
在 CentOS 7 中使用 yum 工具时,如果出现 "Could not resolve host: mirrorlist.centos.org" 的错误,通常是因为默认的镜像源无法访问。以下是一些常用的解决方法: 检查网络连接:首先使用 ping 命令测试网络连接是否正常…...
在Linux中使用`scp`进行远程目录文件复制
在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令。它允许在远程主机之间复制文件和目录,具有很强的安全性,是一种常用的文件传输工具。以下是如何使用…...

VisionPro 机器视觉案例 之 连接件测量
第十八篇 机器视觉案例 之 连接件测量 文章目录 第十八篇 机器视觉案例 之 连接件测量1.案例要求2.实现思路2.1 测量圆心到直线的距离2.2 测量圆心到直线起点的连线和直线的夹角 3.使用控件3.1 模板匹配工具 —— CogPMAlignTool3.2 定位工具 —— CogFixtureTool3.3 卡尺工具 …...
C++ 中面向对象编程中对象的状态存储与恢复的处理
1.对象存储 1)栈存储: 对于局部对象,它们存储在栈上。当进入包含对象定义的代码块时,对象被创建并压入栈中。 例如: class fun { public: int a; }; void func() { fun A; // 对象存储在栈上,随着函数结束自动销毁…...
ip_output函数
ip_output函数是Linux内核(特别是网络子系统)中用于发送IPv4数据包的核心函数。以下是一个示例实现,并附上详细的中文讲解: int ip_output(struct net *net, struct sock *sk, struct sk_buff *skb) {struct iphdr *iph; /* 构建IP头部 */iph = ip_hdr(skb);/* 设置服务…...

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
一、RAGFlow简介 RAGFlow是一个基于对文档深入理解的开源RAG(Retrieval-augmented Generation,检索增强生成)引擎。 主要作用: 让用户创建自有知识库,根据设定的参数对知识库中的文件进行切块处理,用户向大…...

现代风格VUE3易支付用户控制中心
适用系统 彩虹易支付 技术栈 vitevue3elementuiplusphp 亮点 独立前端代码,扩展开发,不改动系统文件,不影响原版升级 支持功能订制 界面预览...
CentOS 7 上自动安装 Python 3.9 脚本
安装 在 CentOS 7 上安装 Python 3.9 可以通过编写一个 Shell 脚本来自动化这一过程。以下是一个示例脚本,它将帮助你在 CentOS 7 上安装 Python 3.9: #!/bin/bash# 脚本设置失败终止 set -e# 更新系统 # sudo yum update -y# 安装依赖 sudo yum insta…...

Spring(二)---基于注解的方式实现Bean管理和注入属性
目录 引入 什么是注解 Spring针对Bean管理中创建对象提供的注解 用注解的方式创建对象 ①:编写接口和实现类 ②:在需要管理的类上添加Component注解(上边四个都可以) ③:编写配置文件,重点是开启注解…...

采购管理系统的设计与实现【文档+源码】
目录 摘 要 Abstract 第一章 引言 1.1研究现状 1.2主要研究的目的及内容 1.3研究方法及设计思路 1.3.1 研究方法 1.3.2 设计思路 1.4.相关技术简介 1.4.1 JSP技术简介 1.4.2 Struts 框架 1.4.3 Hibernate数据访问框架 1.4.4 B/S模式分析 1.5 系统开发步骤 第二…...

Overleaf编译运行时间太长,国内如何支付升级Overleaf高级账户?
大家好,我是『扑扑特桔』 最近为了赶论文,我一直在 Overleaf 上忙活。 但是因为论文里面图片比较多,因此在某一次编译的时候,突然就提示编译超时。 主要是因为用的是免费版本的Overleaf,对编译时长有限制,…...

UE5喷涂功能
许多FPS/TPS 游戏都有喷涂、涂鸦功能 其实原理很简单,就是利用了延迟贴花实现的 我们从网上随便找一张图 创建一个材质,材质域选择延迟贴花 混合模式选择半透明,自发光强度可以看感觉调整 材质做好之后编译保存,新建一个Actor…...
Unity局部和世界坐标系相互转换的实现原理
注:本篇是基于唐老师的学习视频做的一些理论实践,需要提前知道一些线性代数的基础知识,原视频链接: 8.数学基础知识学习说明_哔哩哔哩_bilibili 前期准备: 知识点①: Unity中需要遵守的设定:…...

MySQL通用语法 -DDL、DML、DQL、DCL
SQL 全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了 一套操作关系型数据库统一标准 。 SQL通用语法 MySQL语言的通用语法。 SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强…...
C# 6.0 连接elasticsearch数据库
在 C# 6.0 中连接 Elasticsearch 数据库,您可以使用官方的 Elasticsearch 客户端库 NEST。NEST 是一个高性能的 .NET 客户端,用于与 Elasticsearch 进行交互。以下是一个详细的步骤指南,帮助您在 C# 6.0 项目中连接和操作 Elasticsearch。 1. 安装 NEST 包 首先,您需要在您…...
占个坑:利用工作以外的时间,用numpy实现MLP-手写识别
背景 随着近半年的正式工作,一直在做的都是模型后处理相关的,逐渐意识到技术的自我迭代陷入了瓶颈。组里都是搞模型的,对于缺少模型背景的我,很难深刻理解同事将模型和业务结合时好的idear,这使得我难以掌握组里最核心…...

抽象之诗:C++模板的灵魂与边界
引言 在计算机科学的浩瀚长河中,C模板如同一颗璀璨的星辰,以其独特的泛型编程方式为程序设计注入了灵魂。它是抽象的艺术,是类型的舞蹈,是效率与灵活性的交响乐。模板不仅是一种技术工具,更是一种哲学思考,…...

后端统一接口返回状态【初步模板】
后端统一接口返回状态【模板】 文章目录 后端统一接口返回状态【模板】1 .Result类编写2 .Constants类编写3 .更改Controller层下的类return格式 开发过程中,每个接口的返回格式设计都是一样的,这样可以大大提高开发效率。 项目结构如下图:分…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
十二、【ESP32全栈开发指南: IDF开发环境下cJSON使用】
一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有以下核心特性: 完全独立于编程语言的文本格式易于人阅读和编写易于机器解析和生成基于ECMAScript标准子集 1.1 JSON语法规则 {"name"…...
项目研究:使用 LangGraph 构建智能客服代理
概述 本教程展示了如何使用 LangGraph 构建一个智能客服代理。LangGraph 是一个强大的工具,可用于构建复杂的语言模型工作流。该代理可以自动分类用户问题、分析情绪,并根据需要生成回应或升级处理。 背景动机 在当今节奏飞快的商业环境中,…...
基于Java的离散数学题库系统设计与实现:附完整源码与论文
JAVASQL离散数学题库管理系统 一、系统概述 本系统采用Java Swing开发桌面应用,结合SQL Server数据库实现离散数学题库的高效管理。系统支持题型分类(选择题、填空题、判断题等)、难度分级、知识点关联,并提供智能组卷、在线测试…...