掌握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。 一条…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...
