【基础篇】第4章 Elasticsearch 查询与过滤

在Elasticsearch的世界里,高效地从海量数据中检索出所需信息是其核心价值所在。本章将深入解析查询与过滤的机制,从基础查询到复合查询,再到全文搜索与分析器的定制,为你揭开数据检索的神秘面纱。

4.1 基本查询

4.1.1 Match查询

Match查询是最基础的全文查询方式,用于查找与指定字段内容相匹配的文档。它支持模糊匹配,适用于字符串字段。例如,查询包含"elasticsearch"的文档:

{"query": {"match": {"content": "elasticsearch"}}
}

4.1.2 Term查询

Term查询用于精确匹配,不进行分析,即搜索时完全按照输入的词进行查找,适用于数字、日期或未经分析的字符串字段:

{"query": {"term": {"tag": "tutorial"}}
}

4.1.3 Range查询

Range查询用于筛选字段值在特定范围内的文档,适用于日期、数字等类型:

{"query": {"range": {"publish_date": {"gte": "2023-01-01","lte": "2023-12-31"}}}
}

4.2 复合查询与过滤

4.2.1 组合查询

组合查询通过将多个查询条件逻辑组合起来,实现更复杂的检索需求。常见的组合查询有boolshouldmustmust_not等。

{"query": {"bool": {"must": [{ "match": { "title": "Elasticsearch" }}],"filter": [{ "term": { "category": "technology" }}]}}
}

4.2.2 布尔查询与上下文

布尔查询是复合查询中最常用的形式,它允许你组合多个查询条件,通过must(与)、should(或)、must_not(非)来表达逻辑关系。filter子句用于过滤条件,与评分无关,提高查询效率。

4.2.3 查询与过滤的区别

查询上下文(query context)会影响文档的评分,适合全文搜索;而过滤上下文(filter context)不计算文档得分,仅用于过滤结果集,适用于精确匹配或条件筛选,性能更优。

4.3 全文搜索与分析器

4.3.1 全文检索原理

全文检索基于倒排索引,将文档中每个单词映射到包含该单词的所有文档的列表。这一机制允许Elasticsearch快速定位包含特定词汇的文档,是全文搜索的基础。
在这里插入图片描述

4.3.2 分析器的工作机制

分析器是全文搜索的核心组件,负责将文本分割成词语(Tokenization)、转换(Normalization)、去除停用词(Stop Words Removal)等过程,最终生成索引项或查询项。这一过程包括了三个关键步骤:字符过滤、分词、以及词元过滤。下面,我们将逐一深入探讨这些步骤。

字符过滤(Character Filtering)

字符过滤是分析过程的第一步,它的主要任务是在文本被分词之前,对文本进行预处理,移除或替换某些不需要的字符。例如,HTML标签、特殊符号或者非打印字符等,常常在这个阶段被处理掉。字符过滤器可以确保后续步骤能够专注于文本的实际内容,而不是被这些附加元素干扰。

示例代码片段:

"char_filter": ["html_strip"]

这里,html_strip就是一个字符过滤器,它负责去除文本中的HTML标签,确保纯文本内容进入后续处理环节。

分词(Tokenization)

分词是分析过程中最核心的步骤,它将文本切分成一个个有意义的单元,这些单元被称为词元(tokens)。分词器(tokenizer)决定着如何将文本分割,不同的分词器适用于不同类型的内容。例如,standard分词器会按单词边界进行分割,而whitespace分词器则简单地按空格分割文本。

示例代码片段:

"tokenizer": "standard"

使用standard分词器,一个句子会被分解成单个词汇,同时去除标点符号。

词元过滤(Token Filtering)

词元过滤发生在分词之后,这个阶段可以对产生的词元进行进一步的修改或处理。常见的操作包括转换大小写、删除停用词(stop words)、同义词替换、词干提取(stemming)或词形还原(lemmatization)等。这些操作有助于减少索引的大小,提高搜索效率,同时增强搜索的灵活性和准确性。

示例代码片段:

"filter": ["lowercase", "asciifolding"]
  • lowercase过滤器将所有词元转换为小写,确保搜索时大小写不敏感。
  • asciifolding过滤器将非ASCII字符转换为它们的ASCII等价形式,比如将é转换为e,这有助于国际化搜索的一致性。

综合作用

通过这三个步骤,原始文本被转换成了适合索引和搜索的形式。每个分析器都是由这三个组件的不同组合构成的,用户可以根据具体需求定制分析器,以优化搜索体验。例如,对于英文文档,可能需要去除停用词和执行词干提取;而对于中文文档,则可能需要利用专门的中文分词器,如IK Analyzer。

理解分析器的工作机制对于优化Elasticsearch的搜索性能和准确性至关重要,它允许用户精确控制文本如何被索引和搜索,从而满足各种复杂的应用场景需求。

4.3.3 自定义分析器

Elasticsearch提供了丰富的内置分析器,如standard、whitespace、keyword等。若内置分析器不能满足特定需求,可自定义分析器,通过组合字符过滤器(Character Filters)、分词器(Tokenizer)和词元过滤器(Token Filters)来定制化文本处理流程。

{"analysis": {"analyzer": {"my_custom_analyzer": {"type": "custom","tokenizer": "standard","char_filter": ["html_strip"],"filter": ["lowercase", "asciifolding"]}}}
}

小结

本章详细介绍了Elasticsearch查询与过滤的基础与高级概念,从简单到复杂的查询构建,到深入全文检索原理与分析器定制,为高效检索数据提供了全面的理论与实践指导。掌握这些技能,你将能更加灵活地在Elasticsearch中执行复杂的数据搜索任务。接下来的《第5章 数据聚合与分析》将进一步探讨如何利用Elasticsearch强大的聚合功能,对数据进行深度分析与洞察。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/40537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java操作Excel最佳实践

Java操作Excel最佳实践 1、背景描述2、Apache POI简介3、Java读取Excel 1、背景描述 2、Apache POI简介 官网&#xff1a;http://poi.apache.org/index.html 官方文档&#xff1a;https://poi.apache.org/apidocs/index.html 3、Java读取Excel 3.1、导入依赖 <dependency…

Qt——升级系列(Level Seven):事件、文件

目录 Qt事件 事件介绍 事件的处理 按键事件 鼠标事件 定时器 事件分发器 事件过滤器 Qt文件 Qt文件概述 输入输出设备类 文件读写类 文件和目录信息类 Qt事件 事件介绍 事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt …

工商业光伏项目如何快速开发?

一、前期调研与规划 1、屋顶资源评估&#xff1a;详细测量屋顶面积、承重能力及朝向&#xff0c;利用光伏业务管理软件进行日照分析和发电量预测&#xff0c;确保项目可行性。 2、政策与补贴研究&#xff1a;深入了解当地政府对工商业光伏项目的政策支持和补贴情况&#xff0…

Java面试过程中遇到的问题

Java面试过程中遇到的问题 介绍工作经验项目 介绍项目 为什么选用这个技术 报表服务怎么实现的 java框架 1、spring clound特性&#xff0c;组件有那些以及作用 springCloud是一套微服务组件&#xff0c; 常用的Eureka&#xff0c;Ribbon&#xff0c;Hystrix&#xff0c;Fe…

第三方支付平台如何完美契合跨境电商?

在全球化的大潮中&#xff0c;跨境电商"Eurasia Boutique"的创始人艾米丽&#xff0c;带着她的梦想和手工艺品&#xff0c;踏上了进入中国市场的征程。这是一个充满挑战和机遇的旅程&#xff0c;艾米丽和她的企业需要面对和解决一系列复杂的问题。 合规的门槛 艾米…

JVM原理(十四):JVM虚拟机运行时栈帧结构

Java虚拟机已方法作为最基本的执行单位。 栈帧&#xff1a;是支持Java虚拟机进行方法调用和方法执行背后的数据结构。 栈帧存储了方法的 局部变量表、操作数栈、动态连接和放回地址等信息。 每一个方法的调用开始和执行结束&#xff0c;都对应着一个栈帧在虚拟机栈里面从入栈…

Linux文件与日志

目录 1. Linux 文件系统 1.1 inode号 1.2 EXT类型文件恢复 1.3 xfs类型文件备份和恢复 2. 日志分析 2.1 日志类型 2.2日志配置文件 2.3 日志分析的重要性 在Linux系统中&#xff0c;文件和日志是管理和维护系统运行所不可或缺的。理解它们的工作原理和如何有效地管理和…

驱动开发:配置Visual Studio驱动开发环境

100编程书屋_孔夫子旧书网 配置驱动开发环境配置驱动开发模板配置驱动双机调试 在正式开始驱动开发之前&#xff0c;需要自行搭建驱动开发的必要环境&#xff0c;首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具&#xff0c;在课件内请双击ISO文件并运行内部的…

2009-2024年第一季度上市公司华证ESG评级季度数据

2009-2024年第一季度上市公司华证ESG评级季度数据 1、时间&#xff1a;2009-2024年第一季度 2、指标&#xff1a;证券代码、证券简称、评级日期、综合评级、综合得分、E评级、E得分、S评级、S得分、G评级、G得分、证监会行业&#xff08;新&#xff09;、同花顺行业&#xff…

Visio框图自动带填充色原因及如何取消

0 Preface/Foreword Visio&#xff0c;Windows的一个流程图&框图制作工具。 1 新建Visio文件 1.1 图形带填充 新建Visio时候&#xff0c;如果选择了模版&#xff0c;那么就后期使用的工具元素会自动填充。 带来的弊端&#xff0c;在元素编辑文字时&#xff0c;如果此时不…

苹果公司的Wifi定位服务(WPS)存在被滥用的风险

安全博客 Krebs on Security 2024年5月21日发布博文&#xff0c;表示苹果公司的定位服务存在被滥用风险&#xff0c;通过 "窃取"WPS 数据库&#xff0c;可以定位部队行踪。 相关背景知识 手机定位固然主要依赖卫星定位&#xff0c;不过在城市地区&#xff0c;密集的…

Perl 语言开发(五):循环语句

目录 1. 循环语句概述 2. while 循环 2.1 基本语法 2.2 示例 2.3 无限循环 3. until 循环 3.1 基本语法 3.2 示例 3.3 无限循环 4. for 循环 4.1 基本语法 4.2 示例 4.3 嵌套循环 5. foreach 循环 5.1 基本语法 5.2 示例 5.3 遍历哈希 6. 循环控制语句 6.1 …

新建Vue工程的几种方法

文章目录 使用CLI2 : vue-cli使用CLI3 : vue/cli使用 vue3构建 &#xff08;内置Vite&#xff09;直接使用Vite使用parcel (最少配置方案) 使用CLI2 : vue-cli vue-cli是针对构建vue的脚手架CLI2&#xff0c;只能新建vue2工程。 全局安装vue-cli之后&#xff0c;构建vue2项目的…

03.C1W2.Sentiment Analysis with Naïve Bayes

目录 Probability and Bayes’ RuleIntroductionProbabilitiesProbability of the intersection Bayes’ RuleConditional ProbabilitiesBayes’ RuleQuiz: Bayes’ Rule Applied Nave Bayes IntroductionNave Bayes for Sentiment Analysis P ( w i ∣ c l a s s ) P(w_i|clas…

大数据领域的深度分析——AI是在帮助开发者还是取代他们?

在大数据领域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;的应用正在迅速扩展&#xff0c;改变了数据科学家和开发者的工作方式。本文将从大数据的专业视角&#xff0c;探讨AI工具在这一领域的作用&#xff0c;以及它们是如何帮助开发者而非取代他们的。 1. 大数据…

npm 淘宝镜像证书过期,错误信息 Could not retrieve https://npm.taobao.org/mirrors/node/latest

更换 npm 证书 问题描述报错原因更换步骤1 找到 nvm 安装目录2 发现证书过期3 更换新地址4 保存后&#xff0c;重新安装成功 问题描述 在使用 nvm 安装新版本时&#xff0c;未成功&#xff0c;出现报错&#xff1a; Could not retrieve https://npm.taobao.org/mirrors/node/l…

【postgresql】表操作

创建表 (CREATE TABLE): CREATE TABLE table_name ( column1 data_type constraint,column2 data_type constraint,... ); 插入数据 (INSERT INTO): INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 查询数据 (SELECT): SELECT column1, c…

火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?

数据作为新型生产要素&#xff0c;正支撑企业的数智化转型。但企业数字化建设也存在管理成本高、数据产品使用门槛高、数据资产价值不够的问题&#xff0c;其原因在于业务和数据之间没有形成双向良性驱动。 结合新时代企业数字化转型需求&#xff0c;火山引擎基于字节跳动十余…

IC烧录员-带着工程师的梦想远航!

如果说软件工程师是代码程序的创造者&#xff0c;那么IC烧录员就是把工程师们辛苦敲代码&#xff0c;日夜辛劳的成果烧录到芯片里面的实践者&#xff0c;是他们&#xff0c;让工程师们的梦想运用到实践中&#xff0c;是他们带着工程师的梦想远航&#xff0c;他们的薪酬或许没有…

第一节-k8s架构图

一个Deployment&#xff0c;可以由多个不同Node下的Pod组成&#xff0c;每个Pod又由多个Container组成。 区分Deployment是用Labels(key:value)&#xff0c;区分Pod是用PodName&#xff0c;区分Container是用ContainerName。 一个Node可以包含多个不同Deployment中的pod&…