【Elasticsearch】文本分析Text analysis概述
文本分析概述
文本分析使 Elasticsearch 能够执行全文搜索,搜索结果会返回所有相关的结果,而不仅仅是完全匹配的结果。
如果你搜索“Quick fox jumps”,你可能希望找到包含“A quick brown fox jumps over the lazy dog”的文档,你也可能希望找到包含相关词汇(如“fast fox”或“foxes leap”)的文档。
分析通过分词实现全文搜索:将文本分解成更小的单元,称为词元。在大多数情况下,这些词元是单独的单词。
如果你将短语“the quick brown fox jumps”作为一个单一字符串进行索引,而用户搜索“quick fox”,那么它不会被视为匹配。然而,如果你对短语进行分词并将每个单词分别索引,查询字符串中的术语就可以单独查找。这意味着它们可以通过搜索“quick fox”“fox brown”或其他变体来匹配。
分词使得能够对单个术语进行匹配,但每个词元仍然会逐字匹配。这意味着:
• 搜索“Quick”不会匹配“quick”,尽管你可能希望这两个词能够相互匹配。
• 尽管“fox”和“foxes”有相同的词根,但搜索“foxes”不会匹配“fox”,反之亦然。
• 搜索“jumps”不会匹配“leaps”。尽管它们没有相同的词根,但它们是同义词,意思相近。
为了解决这些问题,文本分析可以将这些词元规范化为标准格式。这使得你可以匹配那些与搜索词不完全相同,但仍然足够相关的词元。例如:
• “Quick”可以转换为小写:“quick”。
• “foxes”可以进行词干提取,即还原为词根:“fox”。
• “jump”和“leap”是同义词,可以索引为同一个词:“jump”。
为了确保搜索词能够按预期匹配这些词,你可以对查询字符串应用相同的分词和规范化规则。例如,搜索“Foxes leap”可以被规范化为搜索“fox jump”。
自定义文本分析
文本分析是由分析器执行的,它是一组规则,控制整个分析过程。
Elasticsearch 包含一个默认的分析器,称为标准分析器,它在大多数情况下都能很好地工作。
如果你想定制搜索体验,你可以选择不同的内置分析器,甚至可以配置一个自定义的分析器。自定义分析器让你能够控制分析过程的每一步,包括:
• 在分词之前对文本进行更改。
• 文本如何转换为词元。
• 在索引或搜索之前对词元进行的规范化更改。
索引和搜索分析
文本分析发生在两个时间点:
索引时间
当文档被索引时,任何`text`字段的值都会被分析。
搜索时间
在对`text`字段执行全文搜索时,用户正在搜索的查询字符串(即用户输入的文本)会被分析。搜索时间也被称为查询时间。
在每个时间点使用的分析器(或分析规则集)分别被称为索引分析器或搜索分析器。
索引分析器和搜索分析器如何协同工作
在大多数情况下,索引和搜索时应该使用相同的分析器。这可以确保字段的值和查询字符串被转换成相同形式的标记(tokens)。反过来,这可以确保在搜索期间标记能够按预期匹配。
示例
一个文档在`text`字段中索引了以下值:
```
The QUICK brown foxes jumped over the dog!
```
字段的索引分析器将值转换为标记并对其进行规范化。在这个例子中,每个标记代表一个单词:
```
[ quick, brown, fox, jump, over, dog ]
```
然后这些标记被索引。
稍后,用户在同一个`text`字段中搜索以下内容:
用户期望这个搜索能够匹配之前索引的句子`The QUICK brown foxes jumped over the dog!`。
然而,查询字符串并不包含文档原始文本中使用的精确单词:
• `Quick`vs`QUICK`
• `fox`vs`foxes`
为了应对这种情况,查询字符串使用相同的分析器进行分析。这个分析器产生了以下标记:
为了执行搜索,Elasticsearch将这些查询字符串标记与`text`字段中索引的标记进行比较。
标记 查询字符串 `text`字段
`quick` X X
`brown` X
`fox` X X
`jump` X
`over` X
`dog` X
由于字段值和查询字符串以相同的方式进行了分析,它们产生了类似的标记。标记`quick`和`fox`是精确匹配的。这意味着搜索匹配了包含`"The QUICK brown foxes jumped over the dog!"`的文档,正如用户所期望的那样。
何时使用不同的搜索分析器
虽然不太常见,但在某些情况下,使用不同的索引和搜索分析器是有意义的。为此,Elasticsearch允许你为查询字符串指定一个单独的搜索分析器。
通常,只有在使用相同形式的标记对字段值和查询字符串进行匹配时会创建意外或不相关的搜索结果时,才应该指定一个单独的搜索分析器。
示例
Elasticsearch被用于创建一个搜索引擎,该引擎只匹配以提供的前缀开头的单词。例如,搜索`tr`应该返回`tram`或`trope`,但永远不会返回`taxi`或`bat`。
一个文档被添加到搜索引擎的索引中;该文档在`text`字段中包含一个这样的单词:
字段的索引分析器将值转换为标记并对其进行规范化。在这个例子中,每个标记代表一个可能的单词前缀:
```
[ a, ap, app, appl, apple]
```
然后这些标记被索引。
稍后,用户在同一个`text`字段中搜索以下内容:
用户期望这个搜索只匹配以`appli`开头的单词,例如`appliance`或`application`。搜索不应该匹配`apple`。
然而,如果使用字段的索引分析器来分析这个查询字符串,它会产生以下标记:
```
[ a, ap, app, appl, appli ]
```
当Elasticsearch将这些查询字符串标记与`apple`索引的标记进行比较时,它会找到多个匹配项。
标记 `appli` `apple`
`a` X X
`ap` X X
`app` X X
`appl` X X
`appli` X
这意味着搜索会错误地匹配`apple`。不仅如此,它还会匹配任何以`a`开头的单词。
为了解决这个问题,你可以为`text`字段的查询字符串指定一个不同的搜索分析器。
在这种情况下,你可以指定一个产生单个标记而不是一组前缀的搜索分析器:
这个查询字符串标记只会匹配以`appli`开头的单词的标记,这更符合用户的搜索期望。
相关文章:
【Elasticsearch】文本分析Text analysis概述
文本分析概述 文本分析使 Elasticsearch 能够执行全文搜索,搜索结果会返回所有相关的结果,而不仅仅是完全匹配的结果。 如果你搜索“Quick fox jumps”,你可能希望找到包含“A quick brown fox jumps over the lazy dog”的文档,…...
【IDEA】2017版本的使用
目录 一、常识 二、安装 1. 下载IDEA2017.exe 2. 安装教程 三、基本配置 1. 自动更新关掉 2. 整合JDK环境 3. 隐藏.idea文件夹和.iml等文件 四、创建Java工程 1. 新建项目 2. 创建包结构,创建类,编写main主函数,在控制台输出内容。…...
ES6 Proxy 用法总结以及 Object.defineProperty用法区别
Proxy 是 ES6 引入的一种强大的拦截机制,用于定义对象的基本操作(如读取、赋值、删除等)的自定义行为。相较于 Object.defineProperty,Proxy 提供了更灵活、全面的拦截能力。 1. Proxy 语法 const proxy new Proxy(target, hand…...
数据结构——【二叉树模版】
#思路 1、二叉树不同于数的构建,在树节点类中,有数据,左子结点,右子节点三个属性,在树类的构造函数中,添加了变量maxNodes,用于后续列表索引的判断 2.GetTreeNode()函数是常用方法,…...
关闭浏览器安全dns解决访问速度慢的问题
谷歌浏览器加载速度突然变慢了?检查安全DNS功能(DoH)是否被默认开启。 谷歌浏览器在去年已经推出安全DNS功能(即DoH) , 启用此功能后可以通过加密的DNS增强网络连接安全性。例如查询请求被加密后网络运营商将无法嗅探用户访问的地址,因此对于增强用户的…...
【AIGC】语言模型的发展历程:从统计方法到大规模预训练模型的演化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯语言模型的发展历程:从统计方法到大规模预训练模型的演化1 统计语言模型(Statistical Language Model, SLM):统…...
Spring Boot 中的事务管理:默认配置、失效场景及集中配置
Spring Boot 提供了强大的事务管理功能,基于 Spring 的 Transactional 注解。本文将详细介绍事务的默认配置、事务失效的常见场景、以及事务的几种集中配置方式,并给出相应的代码片段。 一、事务的默认配置 在 Spring Boot 中,默认情况下&am…...
DeepSeek 助力 Vue 开发:打造丝滑的进度条
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
deepseek的CoT优势、两阶段训练的有效性学习笔记
文章目录 1 DeepSeek的CoT思维链的优势1.2 open-r1的CoT训练数据1.3 ReAct任务与CoT任务适用场景 2 AI推理方向:deepseek与deepmind的两条路线的差异2.1 PRM与ORM的两大学派分支的差异2.2 DeepSeek-R1的两阶段训练概述 1 DeepSeek的CoT思维链的优势 DeepSeek跟之前…...
分享在职同时准备系统分析师和教资考试的时间安排
(在职、时间有限、同时备考系统分析师考试和小学信息技术教资面试),以下是详细的备考计划,确保计划的可行性和通过性。 一、总体安排 时间分配: 每周周末(2天)用于系统分析师考试备考。工作日晚…...
浅谈Java Spring Boot 框架分析和理解
Spring Boot是一个简化Spring开发的框架,它遵循“约定优于配置”的原则,通过内嵌的Tomcat、Jetty或Undertow等容器,使得开发者能够快速构建独立运行的、生产级别的基于Spring框架的应用程序。Spring Boot包含了大量的自动配置功能,…...
【开发心得】CentOS7编译Redis7.4.2打包RPM完整方案
概述 由于最近客户需要解决redis版本升级问题,故而全网寻找安全版本,redis7.4.x版本求而为果,只能自己编译了。 截止发文时间2025-02-12 最新稳定版的redis版本号为7.4.2 Security fixes (CVE-2024-46981) Lua script commands may lead t…...
【网络安全】常见网络协议
1. 网络协议概述 网络协议是网络上两个或多个设备使用的一组规则,用于描述传输顺序和数据结构。网络协议充当数据包中信息附带的指令。这些指令告诉接收设备如何处理数据。协议就像一种通用语言,让世界各地的设备能够相互通信和理解。 尽管网络协议在网…...
电路笔记(元器件):AD 5263数字电位计(暂记)
AD5263 是四通道、15 V、256位数字电位计,可通过SPI/I2C配置具体电平值。 配置模式: W引脚作为电位器的抽头,可在A-B之间调整任意位置的电阻值。也可将W与A(或B)引脚短接,A-W间的电阻总是0欧姆,通过数字接口调整电位器…...
MongoDB 的使用场景
一、内容管理系统 1. 博客平台 文章内容、作者信息、标签、评论等数据结构多样,MongoDB 的无模式特性可轻松应对。比如 WordPress 等博客系统,使用 MongoDB 能灵活存储不同格式和长度的文章内容,以及与文章相关的各种元数据。 2. 新闻网站…...
MongoDB 是什么
MongoDB 是一款文档型数据库,属于 NoSQL 数据库范畴。 一、基本概念 MongoDB 以文档的形式存储数据,文档类似于 JSON 对象,由键值对组成,它以 BSON(Binary JSON)格式存储在磁盘上,这种格式支持…...
Python3操作MongoDB批量upsert
个人博客地址:Python3操作MongoDB批量upsert | 一张假钞的真实世界 代码如下: mongoClient MongoClient(mongodb://172.16.72.213:27017/) opsDb mongoClient.ops azScheduled opsDb.azScheduledFlowbulkOpers [] for flow in scheduledFlows.valu…...
相机模数转换
模拟图像是什么? 模拟图像是指连续变化的图像,它通常来源于现实世界的物理场景,并通过光学系统(如相机镜头)投射到感光介质上。模拟图像是连续的,这意味着它在空间和颜色值上都有无穷的细节。例如…...
C++20 新特性解析
1. 概念(Concepts) 概念是 C++20 引入的一项重要特性,它允许程序员定义类型约束,从而在编译时检查模板参数是否符合某些要求。概念提供了模板参数的限制,使得模板代码更加可读和易于维护。 示例代码: #include <iostream> #include <concepts>// 定义一个…...
C# ManualResetEvent 类 使用详解
总目录 前言 ManualResetEvent 是 C# 中用于线程同步的核心类之一,位于 System.Threading 命名空间下。它的核心功能是通过信号机制控制线程的执行顺序,允许一个或多个线程等待某个信号后再继续运行。与 AutoResetEvent 不同,ManualResetEve…...
ThunderAI:开箱即用的桌面AI助手,聚合Ollama与多模型应用实战
1. 项目概述:一个开箱即用的AI助手桌面应用最近在折腾本地AI应用的时候,发现了一个挺有意思的项目,叫ThunderAI。这名字听着就挺带劲,像一道闪电,主打的就是一个“快”和“直接”。简单来说,它就是一个基于…...
VMware Workstation Pro 17免费激活实战:5分钟解锁专业虚拟化
VMware Workstation Pro 17免费激活实战:5分钟解锁专业虚拟化 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versions of V…...
ZeroAPI:基于订阅与任务感知的AI模型智能路由插件设计与实践
1. 项目概述:ZeroAPI,一个为AI订阅服务而生的智能路由插件如果你和我一样,手头订阅了不止一个AI服务——比如OpenAI的ChatGPT Plus、月之暗面的Kimi、智谱AI的GLM,可能还有MiniMax或者通义千问——那你一定遇到过这个烦恼…...
龙为权,凰为心:凰标守住文化最柔软的底线@凤凰标志
龙为权凰为心 中国文艺生态的双轨平衡宣言秩序权力与创作初心,一刚一柔, 如日月轮值,缺一不可。 龙标掌「权」,凰标守「心」, 双轨并行,方可让文化既筋骨强健,又血肉温润。一、龙标:…...
深度解析VMDE:Windows系统虚拟机检测的终极武器
深度解析VMDE:Windows系统虚拟机检测的终极武器 【免费下载链接】VMDE Source from VMDE paper, adapted to 2015 项目地址: https://gitcode.com/gh_mirrors/vm/VMDE 在网络安全研究的世界里,有一个永恒的问题困扰着分析师们:"我…...
Azure OpenAI代理:无缝迁移OpenAI应用到Azure云服务
1. 项目概述如果你正在使用或开发基于OpenAI官方API的应用,比如各种ChatGPT Web UI、LangChain应用,但同时又想利用微软Azure OpenAI Service在合规性、稳定性、网络延迟或成本控制上的优势,那么你大概率会遇到一个头疼的问题:这两…...
公交查询|智能公交|公交线路查询|基于SprinBoot+vue智能公交系统(源码+数据库+文档)
公交查询|智能公交|公交线路查询系统 目录 基于SprinBootvue智能公交系统 一、前言 二、系统设计 三、系统功能设计 1用户模块实现 2管理员服务端模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介…...
单片机开发者如何通过Taotoken调用大模型API优化代码注释
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 单片机开发者如何通过Taotoken调用大模型API优化代码注释 对于单片机开发者而言,编写清晰、准确的代码注释是提升项目可…...
如何在Chrome浏览器中快速生成与扫描二维码:终极免费插件指南
如何在Chrome浏览器中快速生成与扫描二维码:终极免费插件指南 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件,用于生成当前URL或者选中内容的二维码&a…...
SIGTRAN协议:电信网络IP化的关键技术解析
1. SIGTRAN:下一代电信网络的信令传输基石2003年全球电信业寒冬中,一个技术决策正在悄然改变行业格局。当运营商们紧缩资本开支时,AT&T、Verizon等巨头却不约而同地加大了对IP网络的投入。这背后隐藏着一个关键技术转折——传统TDM网络向…...
