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

news2024/11/19 16:36:12

在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.coloradmin.cn/o/1882043.html

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

相关文章

内容个性化的智能引擎:Kompas.ai如何满足用户需求

在数字化时代,用户对内容的消费趋向个性化和定制化。个性化内容不仅能提升用户体验,还能增强品牌与用户之间的互动。Kompas.ai作为一款先进的智能引擎,正通过其独特的技术满足用户的个性化需求。 个性化内容的重要性 个性化内容在提升用户体验…

2024 vue3入门教程:01vscode终端命令创建第一个vue项目

参考vue官网手册:https://cn.vuejs.org/guide/quick-start.html 一、找个盘符,新建文件夹存储以后得vue项目 我的是e盘下创建了vueproject 二、使用vscode打开存储vue项目的文件夹 因为我生成过项目,所以有文件,你们初次是没有…

分布式存储和分布式计算两个哪个更适合作为工作深入方向发展?

有朋友问,分布式存储比如hdfs,ceph,minio,tidb,glusterfs;分布式计算比如Hadoop,spark,flink;它们在实际工作中咋样?具体开发工作是啥?哪个更有发…

leetCode.96. 不同的二叉搜索树

leetCode.96. 不同的二叉搜索树 题目思路 代码 // 方法一:直接用卡特兰数就行 // 方法二:递归方法 class Solution { public:int numTrees(int n) {// 这里把 i当成整个结点,j当成左子树最左侧结点,并一次当根节点尝试// f[ i ] f[ j - 1…

《昇思25天学习打卡营第19天 | 昇思MindSporeDiffusion扩散模型》

19天 本节学了Diffusion扩散模型相关知识,并且通过实例完成扩散模型。Diffusion是从纯噪声开始通过一个神经网络学习逐步去噪,最终得到一个实际图像。 1.Diffusion对于图像的处理包括以下两个过程: 1.1我们选择的固定(或预定义&…

Is ChatGPT a Good Personality Recognizer? A Preliminary Study?

ChatGPT是一个很好的人格识别者吗?初步调研 摘要1 介绍2 背景和相关工作3 实验3.1 数据集3.2 提示策略3.3 基线3.4 评估指标3.5 实现细节3.6 Overall Performance (RQ1)3.7 ChatGPT在人格识别上的公平性 (RQ2)3.8 ChatGPT对下游任务的人格识别能力(RQ3&a…

python-求s=a+aa+aaa+aaaa+aa...a的值(赛氪OJ)

[题目描述] 求 saaaaaaaaaaaa...a 的值,其中 a 是一个一位的整数。 例如 :2222222222222222(此时共有 5 个数相加)。输入格式: 整数 a 和 n ( n 个数相加)。输出格式: s 的值。样例输入 2 2样例输出 24数据…

操作系统精选题(四)(论述题)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀操作系统 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 一、银行家算法的一道例题 二、页…

Stateflow快速入门系列(七): 使用时序逻辑调度图动作

要定义 Stateflow 图在仿真时间的行为,请在图的状态和转移动作中包含时序逻辑运算符。时序逻辑运算符是内置函数,告知状态保持激活的时间长度或布尔条件保持为 true 的时间长度。使用时序逻辑,您可以控制以下各项的时序: 各状态之…

守护矿山安全生产:AI视频分析技术在煤矿领域的应用

随着人工智能(AI)技术的快速发展,其在煤矿行业的应用也日益广泛。AI视频智能分析技术作为其中的重要分支,为煤矿的安全生产、过程监测、效率提升和监管决策等提供了有力支持。 一、煤矿AI视频智能分析技术的概述 视频智慧煤矿AI…

[数据库]mysql用户管理权限管理

目录 ​编辑用户管理​编辑 权限管理 ​编辑 ​编辑 ​编辑案例​编辑 细节 ​编辑 用户管理 我们用创建的用户在登录之后可以看到他和root看到的数据库是完全不一样的 权限管理 案例 登录这个账户可以看到还看不到teatdb这个数据库, 因为还没有授权 分配权限 过来刷新…

OpenCV 张正友标定法(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在之前的博客OpenCV 张氏标定法中,我们没有考虑镜头畸变等因素,因此计算出的内参与外参均是理想情况下的数值,而如果我们考虑到镜头的畸变: 我们就需要考虑使用最小二乘法最小化像素坐标的重投影误差(上述所求…

007-GeoGebra基础篇-构建等边三角形

今天继续来一篇尺规作图,可以跟着操作一波,刚开始我写的比较细一点,每步都有截图,后续内容逐渐复杂后我就只放置算式咯。 目录 一、先看看一下最终效果二、本次涉及的内容三、开始尺规画图1. 绘制定点A和B2. 绘制线段AB3. 以点A为…

基于STM32的智能电池管理系统

目录 引言环境准备智能电池管理系统基础代码实现:实现智能电池管理系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:电池管理与优化问题解决方案与优化收尾与总结 1. 引言 智能电池管理系统(Ba…

C语言--vs使用调试技巧

1.什么是bug? 1.产品说明书中规定要做的事情,而软件没有实现。 2.产品说明书中规定不要做的事情,而软件确实现了。 3.产品说明书中没有提到过的事情,而软件确实现了。 4.产品说明书中没有提到但是必须要做的事情,软件确没有实…

预付式消费,今起实行!

近年来,随着我国经济社会快速发展,消费新业态、新模式不断涌现,消费者权益保护也面临新情况、新问题。 大数据杀熟、自动续费难取消、网络直播带货“以假充真”“以次充好”、预付式消费商家跑路……数据显示,2023年,…

Vue 常见面试题及答案

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

鸿蒙:页面路由使用

页面路由使用步骤: 1.导入Router模块 2.使用路由功能,以pushUrl模式为例 3.接收参数、返回 4.此时的路由是不能使用的,需要到main_pages.json中进行注册

vscode的一些使用问题

vscode使用技巧 1、快捷键(1)打开命令面板(2)注释(3)删除行(4)上下移动光标(5)光标回退(6)复制行(7)插入空白行…

opencv编译报错OpenCV does not recognize MSVC_VERSION “1940“

具体如下: CMake Warning at cmake/OpenCVDetectCXXCompiler.cmake:182 (message):OpenCV does not recognize MSVC_VERSION "1940". Cannot set OpenCV_RUNTIME Call Stack (most recent call first):CMakeLists.txt:174 (include) 打开源码\opencv\sources\cmak…