掌握ElasticSearch(六):分析过程
文章目录
- 一、什么是分析
- 1. 字符过滤 (Character Filtering)
- 2. 分词 (Breaking into Tokens)
- 3. 词条过滤 (Token Filtering)
- 4. 词条索引 (Token Indexing)
- 二、内置分析器分类
- 1. 标准分析器 (Standard Analyzer)
- 2. 简单分析器 (Simple Analyzer)
- 3. 语言分析器 (Language Analyzers)
- 4. 关键字分析器 (Keyword Analyzer)
- 5. 模式分析器 (Pattern Analyzer)
- 6. 音译分析器 (Phonetic Analyzer)
- 7. 自定义分析器 (Custom Analyzer)
- 三、如何使用分析器
- 1. 在创建索引时使用分析器
- 示例
- 2. 在 ES 配置文件中指定全局的分析器
- 示例
- 3. 结合以上两种方法使用
- 示例
一、什么是分析
Elasticsearch 的分析过程是将文本数据转换成适合搜索的形式的关键步骤。这一过程主要包括四个阶段:字符过滤、分词、词条过滤和词条索引。
1. 字符过滤 (Character Filtering)
字符过滤是分析过程的第一步,它发生在文本被分词之前。字符过滤器的主要作用是对输入文本进行预处理,以去除或替换某些字符。这一步可以帮助改善后续分析的效果,尤其是在处理包含特殊字符或格式化内容(如 HTML 标签)的文本时尤为重要。
- 用途:例如,可以使用字符过滤器来删除文本中的 HTML 标签,或将某些字符转换为其他字符(比如将连字符转换为空格)。
- 实现:Elasticsearch 提供了一些内置的字符过滤器,如
html_strip
用于剥离 HTML 标签。此外,也可以编写自定义的字符过滤器来满足特定的需求。
2. 分词 (Breaking into Tokens)
分词是将文本切分为更小的单位,即词条(tokens)的过程。每个词条代表一个独立的搜索项。分词器的选择对最终的搜索结果影响很大。
- 分词器类型:
- 标准分词器:适用于多种语言,能够识别并分割大多数常见文本。
- 语言特定分词器:如中文分词器(如 IK 分词器或结巴分词器),能够更好地处理特定语言的文本。
- 模式分词器:允许使用正则表达式来自定义分词规则。
- 例子:假设有一个句子 “Elasticsearch is a powerful search engine”,标准分词器会将其分解为 [“Elasticsearch”, “is”, “a”, “powerful”, “search”, “engine”]。
3. 词条过滤 (Token Filtering)
分词后的词条会通过一系列的词条过滤器进行处理,以优化搜索性能和相关性。词条过滤器可以执行多种操作,包括但不限于:
- 小写转换:将所有词条转换为小写,以确保搜索时不区分大小写。
- 停用词移除:移除那些在搜索中通常不提供有用信息的常见词汇,如 “the”、“and” 等。
- 词干提取:将词条还原到其基本形式,例如将 “running” 转换为 “run”。
- 同义词扩展:将词条替换为一组相关的词条,以提高搜索的覆盖范围。
- 词形还原:将词条还原到其词典形式,与词干提取类似,但更精确。
4. 词条索引 (Token Indexing)
经过字符过滤、分词和词条过滤之后,最终的词条将被索引。索引过程涉及将词条及其元数据(如位置信息、频率等)存储在倒排索引中。倒排索引是一种数据结构,它允许快速查找包含特定词条的文档。
- 倒排索引结构:每个词条对应一个文档列表,列表中的每个元素表示该词条出现在哪个文档中以及出现的位置。
- 索引存储:词条和其元数据被高效地存储,以便于快速检索。
二、内置分析器分类
Elasticsearch 提供了多种内置的分析器,每种分析器都针对特定的使用场景进行了优化。这些内置分析器可以处理不同的语言和文本类型,帮助用户更有效地索引和搜索数据。下面详细介绍几种常用的内置分析器及其特点:
1. 标准分析器 (Standard Analyzer)
描述:这是 Elasticsearch 的默认分析器,适用于多种语言的通用文本分析。它使用标准分词器和标准词条过滤器。
分词器:
- 标准分词器:将文本拆分为单词,忽略标点符号和空白字符。
词条过滤器:
- 小写过滤器:将所有词条转换为小写。
- 停止词过滤器:移除常见的停用词(如 “the”、“is” 等)。
示例:
{"analyzer": {"standard": {"type": "standard"}}
}
2. 简单分析器 (Simple Analyzer)
描述:适用于简单的文本分析,主要用于英文。它使用简单分词器,将文本按非字母字符拆分,并将所有词条转换为小写。
分词器:
- 简单分词器:将文本按非字母字符拆分。
词条过滤器:
- 小写过滤器:将所有词条转换为小写。
示例:
{"analyzer": {"simple": {"type": "simple"}}
}
3. 语言分析器 (Language Analyzers)
描述:Elasticsearch 提供了多种语言特定的分析器,每种语言分析器都针对特定语言的语法和词汇进行了优化。
示例:
- 英语分析器 (
english
):- 分词器:标准分词器
- 词条过滤器:小写过滤器、英语停用词过滤器、英语词干提取过滤器
- 中文分析器 (
smartcn
):- 分词器:智能中文分词器
- 词条过滤器:小写过滤器
示例:
{"analyzer": {"english": {"type": "english"},"smartcn": {"type": "smartcn"}}
}
4. 关键字分析器 (Keyword Analyzer)
描述:不进行任何分析,直接将整个输入文本作为一个单一的词条。适用于不需要分词的字段,如 ID、标签等。
分词器:
- 关键字分词器:将整个输入文本作为一个单一的词条。
示例:
{"analyzer": {"keyword": {"type": "keyword"}}
}
5. 模式分析器 (Pattern Analyzer)
描述:使用正则表达式来分词。适用于需要自定义分词规则的场景。
分词器:
- 模式分词器:根据提供的正则表达式将文本拆分为词条。
示例:
{"analyzer": {"pattern_analyzer": {"type": "pattern","pattern": "\\W+","lowercase": true}}
}
6. 音译分析器 (Phonetic Analyzer)
描述:将词条转换为其音译形式,适用于模糊匹配和拼写纠正。常用算法包括 Soundex 和 Metaphone。
分词器:
- 标准分词器
词条过滤器:
- 音译过滤器:将词条转换为其音译形式。
示例:
{"analyzer": {"phonetic_analyzer": {"tokenizer": "standard","filter": ["soundex"]}}
}
7. 自定义分析器 (Custom Analyzer)
描述:用户可以根据需要组合不同的分词器、字符过滤器和词条过滤器来创建自定义分析器。
示例:
{"settings": {"analysis": {"analyzer": {"my_custom_analyzer": {"type": "custom","char_filter": ["html_strip"],"tokenizer": "standard","filter": ["lowercase", "stop", "snowball"]}}}}
}
三、如何使用分析器
我们可以在创建索引时使用分析器,也可以在ES配置文件中指定全局的analyzer;以及结合以上两种方法使用。
1. 在创建索引时使用分析器
在创建索引时,可以指定特定字段使用的分析器。这种方式提供了细粒度的控制,可以根据每个字段的具体需求选择不同的分析器。
示例
假设我们有一个博客文章的索引,其中包含标题和内容字段,我们可以分别为这两个字段指定不同的分析器。
PUT /blog
{"settings": {"analysis": {"analyzer": {"default_title_analyzer": {"type": "standard"},"default_content_analyzer": {"type": "english"}}}},"mappings": {"properties": {"title": {"type": "text","analyzer": "default_title_analyzer"},"content": {"type": "text","analyzer": "default_content_analyzer"}}}
}
在这个示例中:
default_title_analyzer
使用标准分析器。default_content_analyzer
使用英语分析器。title
字段使用default_title_analyzer
。content
字段使用default_content_analyzer
。
2. 在 ES 配置文件中指定全局的分析器
在 Elasticsearch 的配置文件(通常是 elasticsearch.yml
)中,可以设置全局的分析器。这种方式适用于希望在整个集群中统一使用某个分析器的情况。
示例
假设我们希望在集群中统一使用标准分析器作为默认分析器。
index.analysis.analyzer.default.type: standard
这样配置后,所有新创建的索引如果没有指定特定的分析器,都会使用标准分析器。
3. 结合以上两种方法使用
在实际应用中,可以结合以上两种方法,既在配置文件中设置全局的分析器,又在创建索引时为特定字段指定不同的分析器。这样可以灵活地满足不同场景的需求。
示例
假设我们在配置文件中设置全局的默认分析器为标准分析器,但在创建索引时为特定字段指定不同的分析器。
配置文件 elasticsearch.yml
:
index.analysis.analyzer.default.type: standard
创建索引时的配置:
PUT /blog
{"settings": {"analysis": {"analyzer": {"default_content_analyzer": {"type": "english"}}}},"mappings": {"properties": {"title": {"type": "text"},"content": {"type": "text","analyzer": "default_content_analyzer"}}}
}
在这个示例中:
- 全局默认分析器是标准分析器。
title
字段没有指定分析器,因此会使用全局的默认分析器(标准分析器)。content
字段指定了default_content_analyzer
,使用英语分析器。
相关文章:
掌握ElasticSearch(六):分析过程
文章目录 一、什么是分析1. 字符过滤 (Character Filtering)2. 分词 (Breaking into Tokens)3. 词条过滤 (Token Filtering)4. 词条索引 (Token Indexing) 二、内置分析器分类1. 标准分析器 (Standard Analyzer)2. 简单分析器 (Simple Analyzer)3. 语言分析器 (Language Analyz…...
【设计模式】使用python 实践框架设计
单一职责原则(SRP):一个类应该只有一个职责,意味着该类只应该有一个引起变化的原因。这使得代码更易于维护和理解。 开放封闭原则(OCP):软件实体(类、模块、函数等)应该…...
Apache paimon-CDC
CDC集成 paimon支持五种方式通过模式转化数据提取到paimon表中。添加的列会实时同步到Paimon表中 MySQL同步表:将MySQL中的一张或多张表同步到一张Paimon表中。MySQL同步数据库:将MySQL的整个数据库同步到一个Paimon数据库中。API同步表:将您的自定义DataStream输入同步到一…...
如何分析算法的执行效率和资源消耗
分析算法的执行效率和资源消耗可以从以下几个方面入手: 一、时间复杂度分析 定义和概念 时间复杂度是衡量算法执行时间随输入规模增长的速度的指标。它通常用大 O 符号表示,表示算法执行时间与输入规模之间的关系。例如,一个算法的时间复杂度为 O(n),表示该算法的执行时间…...
提示工程(Prompt Engineering)指南(进阶篇)
在 Prompt Engineering 的进阶阶段,我们着重关注提示的结构化、复杂任务的分解、反馈循环以及模型的高级特性利用。随着生成式 AI 技术的快速发展,Prompt Engineering 已经从基础的单一指令优化转向了更具系统性的设计思维,并应用于多轮对话、…...
音视频入门基础:FLV专题(19)——FFmpeg源码中,解码Audio Tag的AudioTagHeader,并提取AUDIODATA的实现
一、引言 从《音视频入门基础:FLV专题(18)——Audio Tag简介》可以知道,未加密的情况下,FLV文件中的一个Audio Tag Tag header AudioTagHeader AUDIODATA。本文讲述FFmpeg源码中是怎样解码Audio Tag的AudioTagHead…...
前端零基础入门到上班:【Day3】从零开始构建网页骨架HTML
HTML 基础入门:从零开始构建网页骨架 目录 1. 什么是 HTML?HTML 的核心作用 2. HTML 基本结构2.1 DOCTYPE 声明2.2 <html> 标签2.3 <head> 标签2.4 <body> 标签 3. HTML 常用标签详解3.1 标题标签3.2 段落和文本标签3.3 链接标签3.4 图…...
字符脱敏工具类
1、字符脱敏工具类 import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils;/*** 数据脱敏工具类** date 2024/10/30 13:44*/Slf4j public class DataDesensitizationUtils {public static final String STAR_1 "*";public static final …...
【jvm】jvm对象都分配在堆上吗
目录 1. 说明2. 堆上分配3. 栈上分配(逃逸分析和标量替换)4. 方法区分配5. 直接内存(非堆内存) 1. 说明 1.JVM的对象并不总是分配在堆上。2.堆是JVM用于存储对象实例的主要内存区域,存在一些特殊情况,对象…...
@AutoWired和 @Resource原理深度分析!
嗨,你好呀,我是猿java Autowired和Resource是 Java程序员经常用来实现依赖注入的两个注解,这篇文章,我们将详细分析这两个注解的工作原理、使用示例和它们之间的对比。 依赖注入概述 依赖注入是一种常见的设计模式,…...
C++设计模式创建型模式———原型模式
文章目录 一、引言二、原型模式三、总结 一、引言 与工厂模式相同,原型模式(Prototype)也是创建型模式。原型模式通过一个对象(原型对象)克隆出多个一模一样的对象。实际上,该模式与其说是一种设计模式&am…...
重学SpringBoot3-Spring WebFlux之SSE服务器发送事件
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ Spring WebFlux之SSE服务器发送事件 1. 什么是 SSE?2. Spring Boot 3 响应式编程与 SSE为什么选择响应式编程实现 SSE? 3. 实现 SSE 的基本步骤3.…...
YOLO即插即用模块---AgentAttention
Agent Attention: On the Integration of Softmax and Linear Attention 论文地址:https://arxiv.org/pdf/2312.08874 问题: 普遍使用的 Softmax 注意力机制在视觉 Transformer 模型中计算复杂度过高,限制了其在各种场景中的应用。 方法&a…...
探索开源语音识别的未来:高效利用先进的自动语音识别技术20241030
🚀 探索开源语音识别的未来:高效利用自动语音识别技术 🌟 引言 在数字化时代,语音识别技术正在引领人机交互的新潮流,为各行业带来了颠覆性的改变。开源的自动语音识别(ASR)系统,如…...
学习路之TP6--workman安装
一、安装 首先通过 composer 安装 composer require topthink/think-worker 报错: 分析:最新版本需要TP8,或装低版本的 composer require topthink/think-worker:^3.*安装后, 增加目录 vendor\workerman vendor\topthink\think-w…...
.NET内网实战:通过白名单文件反序列化漏洞绕过UAC
01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。 02基本介绍 03原理分析 在渗透测试和红…...
AI Agents - 自动化项目:计划、评估和分配
Agents: Role 角色Goal 目标Backstory 背景故事 Tasks: Description 描述Expected Output 期望输出Agent 代理 Automated Project: Planning, Estimation, and Allocation Initial Imports 1.本地文件helper.py # Add your utilities or helper functions to…...
Git的.gitignore文件
一、各语言对应的.gitignore模板文件 项目地址:https://github.com/github/gitignore 二、.gitignore文件不生效 .gitignore文件只是ignore没有被追踪的文件,已被追踪的文件,要先删除缓存文件。 # 单个文件 git rm --cached file/path/to…...
网站安全,WAF网站保护暴力破解
雷池的核心功能 通过过滤和监控 Web 应用与互联网之间的 HTTP 流量,功能包括: SQL 注入保护:防止恶意 SQL 代码的注入,保护网站数据安全。跨站脚本攻击 (XSS):阻止攻击者在用户浏览器中执行恶意脚本。暴力破解防护&a…...
深度学习:梯度下降算法简介
梯度下降算法简介 梯度下降算法 我们思考这样一个问题,现在需要用一条直线来回归拟合这三个点,直线的方程是 y w ^ x b y \hat{w}x b yw^xb,我们假设斜率 w ^ \hat{w} w^是已知的,现在想要找到一个最好的截距 b b b。 一条…...
SparkSQL整合Hive后,如何启动hiveserver2服务
当spark sql与hive整合后,我们就无法启动hiveserver2的服务了,每次都要先启动hive的元数据服务(nohup hive --service metastore)才能启动hive,之前的beeline命令也用不了,hiveserver2的无法启动,这也导致我…...
前端路由如何从0开始配置?vue-router 的使用
在 Web 开发中,路由是指根据 URL 的不同部分将请求分发到不同的处理函数或页面的过程。路由是单页应用(SPA, Single Page Application)和服务器端渲染(SSR, Server-Side Rendering)应用中的一个重要概念。 在开发中如何…...
Java中的运算符【与C语言的区别】
目录 1. 算术运算符 1.0 赋值运算符: 1.1 四则运算符: - * / % 【取余与C有点不同】 1.2 增量运算符: - * / % * 【右侧运算结果会自动转换类型】 1.3 自增、自减:、-- 2. 关系运算符 3. 逻辑运算符 3.1 短路求值 3.2 【…...
二、基础语法
入门了解 注释 **作用:**在代码中加一些注释和说明,方便自己或者其他程序员阅读代码 两种格式: 单行注释:// 描述信息 通常放在一行代码的上方,或者一条语句的末尾,对该行代码进行说明 多行注释&#x…...
DB-GPT系列(一):DB-GPT能帮你做什么?
DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL and Agents),围绕大模型提供灵活、可拓展的AI原生数据应用管理与开发能力,可以帮助企业快速构建、部署智能AI数据应用,通过智能数据分析、洞察…...
【Python各个击破】numpy
简介 NumPy是一个开源的Python库,它提供了一个强大的N维数组对象和许多用于操作这些数组的函数。它是大多数Python科学计算的基础,包括Pandas、SciPy和scikit-learn等库都建立在NumPy之上。 安装 !pip install numpy导入 import numpy as np用法 # …...
【STM32 Blue Pill编程实例】-4位7段数码管使用
4位7段数码管使用 文章目录 4位7段数码管使用1、7段数码介绍2、硬件准备与接线3、模块配置4、代码实现在本文中,我们将介绍如何将 STM32 Blue Pill开发板与 4 位 7 段数码管连接,并在 STM32CubeIDE 中对其进行编程。 在文章中首先将介绍 4 位 7 段数码管及其与 STM32 Blue Pi…...
[进阶]java基础之集合(三)数据结构
文章目录 数据结构概述常见的数据结构数据结构(栈)数据结构(队列)数据结构(数组)数据结构(链表) 数据结构 概述 数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。数据结构是为了更加方便的管理和使用数据,需要结合具体的业…...
《Apache Cordova/PhoneGap 使用技巧分享》
一、引言 在移动应用开发的领域中,Apache Cordova(也被称为 PhoneGap)是一个强大的工具,它允许开发者使用 HTML、CSS 和 JavaScript 等 Web 技术来构建跨平台的移动应用。这种方式不仅能够提高开发效率,还能降低开发成…...
SCP(Secure Copy
SCP(Secure Copy)是Linux系统下基于SSH协议的安全文件传输工具,用于在本地和远程主机间安全、快速地传输文件和目录。SCP命令通过加密传输确保数据的安全性,并且不占用过多系统资源。 SCP的基本用法 基本语法:…...
东莞网站建设基本流程/网站提交入口百度
今天看别人的SQL时看这里面还有decode()函数,以前从来没接触到,上网查了一下,还挺好用的一个函数,写下来希望对朋友们有帮助哈!decode()函数简介: 主要作用:将查询结果翻…...
苏州苏州最新的/关键词首页排名优化价格
实验一 Matlab软件的使用1、实验目的和要求㈠掌握Matlab软件的使用方法;㈡常用离散时间信号的产生、显示和运算。2、实验内容㈠Matlab软件常用命令和工具箱的使用,学会简单的编程;㈡编程实现常用离散时间信号;㈢离散时间信号的叠加…...
宝塔wordpress搭建/百度知道免费提问
手机服务器超时 内容精选换一换本章节介绍如何通过控制台重启服务器。重启服务器时,可以批量更换云手机镜像。重启服务器会造成云手机断开连接,请提前保存数据。登录管理控制台。在管理控制台左上角,选择待操作服务器所在的区域。在服务列表页…...
厦门做百度推广的网站/网站域名怎么查询
转载于:https://blog.51cto.com/tblduan/1899202...
梁山网站建设多少钱/如何找外包的销售团队
由于在Mac上,使用unity自带的Mono并不好用,特别是无法切换输入法,让人很纠结。 但是还好微软推出了vscode,用起来挺不错的! 下载 Visual Studio Code,解压后将其拖拽到launchpad中。下载安装 Mono 跨平台…...
域名注册完成后如何做网站/湖南网络推广排名
python读写文件 通常我们是通过open函数来读写文件的。 以下是open函数的源码: def open(file, moder, bufferingNone, encodingNone, errorsNone, newlineNone, closefdTrue):我们通常只会用到前两个参数,其中file指的是文件名,而mode指的…...