当前位置: 首页 > news >正文

大数据-174 Elasticsearch Query DSL - 全文检索 full-text query 匹配、短语、多字段 详细操作

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(正在更新…)

章节内容

上节我们完成了如下的内容:

  • 索引操作
  • 增删改查
  • 详细 JSON 操作 记录

在这里插入图片描述

官方地址

https://www.elastic.co/guide/en/elasticsearch/reference/7.3/query-dsl.html

Elasticsearch提供了基于JSON的完整查询DSL(Domain Specific Language 特定域语言)来定义查询,将查询 DSL 视为查询AST(抽象语法树),它由两种子句组成:

  • 叶子查询句 叶子查询子句 在特定域中寻找特定的值,如 match、term、range 查询
  • 复合查询子句 复合查询子句包装其他叶子查询或复合查询,并用于以逻辑方式组合多个查询(例如 bool或dis_max查询),或更改其行为(如 constant_score 查询)
    我们在使用Elasticsearch的时候,避免不使用DSL语句去查询,就像使用关系型数据库的时候要学会使用SQL一样。

查询所有

示例

# 查询所有数据
POST /wzkicu-index/_search
{"query":{"match_all": {}}
}
  • query 代表查询的对象
  • match_all 代表查询所有

执行后,结果如下:
在这里插入图片描述
结果中:

  • took 查询花费时间,单位是毫秒
  • time_out 是否超时
  • _shards 分片信息
  • hits 搜索结果总览对象
  • total 搜索到的总数
  • max_score 所有结果中文档得分的最高分
  • _index 索引库
  • _type 文档类型
  • _id 文档id
  • _score 文档得分
  • _source 文档的数据源

全文检索(full-text query)

全文搜索能够搜索已分析的文本字段,如电子邮件正文、商品描述,使用索引期间应用于字段的同一分词处理查询字符串,全文搜索的分类很多,有如下的这么几种。

匹配搜索(match query)

全文查询的标准查询,查询条件比较宽松:

  • 需要指定字段名
  • 输入文本会进行分词,比如hello world,会拆分成 hello 和 world,然后进行匹配,如果字段内容中包含hello或者world,name就会被查询出来。也就是说match是一个部分匹配的模糊查询。

match queries 接收 text/numerics/dates,对它们进行分词分析,再组织成一个boolean查询,可通过operator指定bool组合操作(or、and、默认是or)。

假设一个案例,目前索引库中,有两部手机,一台电视:
先新增索引库:

# 创建索引
PUT /wzk-property
{"settings": {},"mappings": {"properties": {"title": {"type": "text","analyzer": "ik_max_word"},"images": {"type": "keyword"},"price": {"type": "float"}}}
}

执行的结果如下图所示:
在这里插入图片描述
接着我们写入一些数据进去:

# 添加数据1
POST /wzk-property/_doc/
{"title": "小米电视4A","images": "https://profile-avatar.csdnimg.cn/755ff10be62f4e7081bc36028fa9eafe_w776341482.jpg!1","price": 4288
}# 添加数据2
POST /wzk-property/_doc/
{"title": "小米手机","images": "https://profile-avatar.csdnimg.cn/755ff10be62f4e7081bc36028fa9eafe_w776341482.jpg!1","price": 2699
}# 添加数据3
POST /wzk-property/_doc/
{"title": "华为手机","images": "https://profile-avatar.csdnimg.cn/755ff10be62f4e7081bc36028fa9eafe_w776341482.jpg!1","price": 5699
}

执行结果如下图所示:
在这里插入图片描述
我们进行or关系的match搜索,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系:

# match 分词匹配
POST /wzk-property/_search
{"query":{"match":{"title":"小米电视4A"}}
}

执行结果如下图所示:
在这里插入图片描述
我们可以看到,不仅查到了小米电视、还查询到了小米手机。这不是我们要的结果。此时我们需要使用 and 的方式来进行精确的查找:

# match 分词匹配 title字段 同时 分词后的每个词 都要匹配到才可以(and)
POST /wzk-property/_search
{"query":{"match": {"title":{"query": "小米电视4A","operator": "and"}}}
}

执行结果如下,可以看到已经精准匹配到了:
在这里插入图片描述

短语搜索(match phrase query)

match_query是分词的,text也是分词的,match_phrase的分词结果必须在text字段中都包含,而且顺序必须相同,而且必须是连续的:

# 分词匹配但考虑顺序
# match是不考虑分词出现的顺序
# match_phrase 将遵循分词的出现顺序才进行匹配
POST /wzk-property/_search
{"query": {"match_phrase": {"title": "小米电视"}}
}

执行结果如下图所示:
在这里插入图片描述

# match_phrase 分伺后:1电视 2小米
# 因为条目中 小米电视的出现不是 1、2,所以没有匹配到
POST /wzk-property/_search
{"query": {"match_phrase": {"title": "电视小米"}}
}

执行结果如下图所示:
在这里插入图片描述

# match_phrase 分词 1是小米 2是4A
# 但是由于 原:小米电视4A,对比中没有严格按照1、2的顺序
# 所以没有结果
POST /wzk-property/_search
{"query": {"match_phrase": {"title": "小米4A"}}
}

执行结果如下图所示:
在这里插入图片描述
但是对于刚才的结果,可能我们希望使用 小米4A,可以按照 match_phrase 的顺序来查找到 小米电视4A,而不用严格遵守顺序,可以跳过几个词:

# 通过 slop 可以跳过一个词 来让 match_phrase 匹配到顺序的结果
POST /wzk-property/_search
{"query": {"match_phrase": {"title": {"query": "小米4A","slop": 1}}}
}

query_string 查询

该查询与match类似,但是match需要指定字段名,query_string是在所有字段中搜索,范围更广泛。
Query String Query提供了无需指定某字段而对文档全文进行匹配查询的一个高级查询,同时可以指定在哪些字段上进行匹配。

# 广泛查询 所有字段中查找 2699
POST /wzk-property/_search
{"query": {"query_string": {"query": "2699"}}
}

执行结果如下图所示:
在这里插入图片描述

# 广泛查找 但是你希望从这个default_field字段中查找
POST /wzk-property/_search
{"query": {"query_string": {"query": "2699","default_field": "title"}}
}

执行结果如下图所示:
在这里插入图片描述

# 逻辑查询 使用 OR 或者 AND
POST /wzk-property/_search
{"query": {"query_string": {"query": "手机 OR 小米","default_field": "title"}}
}

执行结果下图所示:
在这里插入图片描述

# 逻辑查询 使用 OR 或者 AND
POST /wzk-property/_search
{"query": {"query_string": {"query": "手机 AND 小米","default_field": "title"}}
}

执行结果如下图所示:
在这里插入图片描述

# 模糊查询,表示 小米 这个词可以有1个词变动
# 比如:小明、米小 都是可以查询出来的
POST /wzk-property/_search
{"query": {"query_string": {"query": "小米~1","default_field": "title"}}
}

执行结果如下图所示:
在这里插入图片描述

# 模糊查询,表示 小米 这个词可以有1个词变动
# 比如:小明、米小 都是可以查询出来的
# 以此类推,如果是 小米~2 那就两个词都可以变动...
POST /wzk-property/_search
{"query": {"query_string": {"query": "米小~1","default_field": "title"}}
}

执行结果如下图所示:
在这里插入图片描述

# 多字段支持
POST /lagou-property/_search
{"query": {"query_string" : {"query":"2699","fields": [ "title","price"]}}
}

执行结果如下图所示:
在这里插入图片描述

多字段匹配查询(multi match query)

如果你需要在多个字段上进行文本搜索,可用multi_match,multi_match在match的基础上支持对多个字段进行文本查询。

# multi_match 是 match查询的一种扩展方式,用于在多个字段上进行查询
POST /wzk-property/_search
{"query": {"multi_match" : {"query":"小米4A","fields": [ "title","images"]}}
}

执行结果如下图所示:
在这里插入图片描述

相关文章:

大数据-174 Elasticsearch Query DSL - 全文检索 full-text query 匹配、短语、多字段 详细操作

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

Spring Boot视频网站:构建可扩展的视频服务平台

6系统测试 为了保证所开发出来的系统质量过关,让所开发出来的系统具备可靠性并能够投入运行使用,这就需要进行系统开发的最后一个关键步骤,那就是系统测试。可以说系统测试就是对系统开发前面的步骤,比如系统分析与设计等进行复查…...

护眼台灯横评:书客、柏曼、明基哪款使用体验好,又能护眼?

如果你使用过护眼台灯,就太能理解为什么护眼台灯会诞生了。护眼台灯确实有一定的护眼作用,光线柔和不刺眼,许多护眼台灯还有智能调光、定时休息等人性化功能。在当今这个数字化时代,长时间面对电脑屏幕或埋头于书本已成为许多人的…...

RDMA笔记

目录 1. RDMA简介1.1. 比较Socket与RDMA的通信1.2. RDMA优势1.3. RDMA 2. RDMA基本元素2.1. QPSQ, SQE & RQ, RQEQPNQPC 2.2. CQ2.3. MR2.4. PD 3. RDMA基本操作3.1. Send & Receive3.2. RDMA Write3.3. RDMA Read 阅读RDMA相关资料,从硬件开发角度对RDMA作…...

Collection 单列集合 List Set

集合概念 集合是一种特殊类 ,这些类可以存储任意类对象,并且长度可变, 这些集合类都位于java.util中,使用的话必须导包 按照存储结构可以分为两大类 单列集合 Collection 双列集合 Map 两种 区别如下 Collection 单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两…...

LabVIEW提高开发效率技巧----跨平台开发

在如今的多平台环境下,开发者常常面临不同操作系统的需求,如Windows、Linux和RT(实时)系统等。而LabVIEW作为一种强大的开发工具,提供了支持跨平台开发的能力,但要使其无缝迁移,开发者需要掌握一…...

创建uniCloud新项目并且是新服务空间,运行会报Error: Invalid uni-id config file错误

问题说明 新创建的服务空间,新起的项目,运行查询数据库就会报错,Uncaught (in promise) Error: Invalid uni-id config file,我记得在原来创建项目的时候,是不需要进行配置的,最近创建新项目出现了这个错误…...

七、IPD 方法论框架(IPD的组织架构)

IPD的组织架构 在IPD(集成产品开发)方法论中,组织架构是确保跨职能团队高效协作、快速响应市场需求的关键要素之一。IPD的组织架构通常打破传统的职能部门隔离,倡导跨职能团队和矩阵式管理模式,使各职能部门在项目开发中紧密合作,从而提高开发效率,降低沟通成本。 IPD…...

iPad mini 7惨遭暗砍一刀

大屏是工作,小屏才是生活。 iPad mini系列,一直被誉为最适合普罗大众的平板。热爱学习、工作的卷王不多,沉迷游戏、追剧的俗人不少。 对娱乐场景而言,便携性是核心属性。iPad mini不大不小,只有两台手机的大小&#x…...

【计算机网络 - 基础问题】每日 3 题(三十六)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…...

Docker镜像

Docker是一个开源的容器化平台,它可以帮助开发人员打包应用程序及其依赖项为轻量级、可移植的容器,以实现快速部署和可扩展性。下面是关于Docker的一些基本概念和优势: 容器:Docker使用容器来封装应用程序和其所有依赖项&#xff…...

Golang | Leetcode Golang题解之第478题在圆内随机生成点

题目: 题解: type Solution struct {radius, xCenter, yCenter float64 }func Constructor(radius, xCenter, yCenter float64) Solution {return Solution{radius, xCenter, yCenter} }func (s *Solution) RandPoint() []float64 {r : math.Sqrt(rand.…...

菜鸟笔记006 截图识别文字插件 textOCR

随手可得的截图识别文字插件 textOCR,识别出来的文字可直接输入到illustrator的当前文档中: 执行条件 1、需截图软件支持,推荐笔记截图工具 2、截好图片直接拖入面板即可完成识别 ****后期可完成实现在illustrator选择图片对象完成文字识别。…...

MySQL【知识改变命运】07

MySQL 1:Group by 分组查询1.1:语法:1.2:练习 2:having⼦句3回顾:3:内置函数3.1 :⽇期函数 1:Group by 分组查询 可以根据某列,进行分组查询,比如学校里面的…...

Matlab自学笔记三十八:日期时间序列的创建方法

1.概念 时间序列是指,某一时间段的时间,也就是说,一组日期时间数据组成的序列,例如,1.1~1.10,1点~5点等,在Matlab中,使用向量表示这种时间序列,例如[2025.1.1 2025.1.2 …...

fiber的原理

React Fiber 的主要原理包括动态优先级、可中断的工作、增量渲染和协作式多任务 React Fiber 是 React 16 引入的一种新的协调(reconciliation)引擎,它旨在提高 React 应用的性能和响应性。Fiber 的核心原理主要包括以下几个方面&#xff1a…...

重塑输电线路运维管理,巡检管理系统守护电网稳定运行

在输电线路巡检管理中,一个高效、直接的巡检系统对于确保电力供应的稳定性和安全性至关重要。巡检系统能够直接对接运维需求,减少繁琐流程,并强化数据分析能力,这无疑为输电线路的运维管理带来了诸多优势。以下是对这些优势的具体…...

各种排序方法总结

目录 1. 冒泡排序 (Bubble Sort 2. 选择排序 (Selection Sort) 3. 插入排序 (Insertion Sort) 4. 快速排序 (Quick Sort) 5. 归并排序 (Merge Sort) 6. 堆排序 (Heap Sort) 排序算法 时间复杂度 空间复杂度 备注冒泡排序 最好情况: O(n) 平均情况: O(n^2) 最坏情况: O(n^…...

【工欲善其事】巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号

文章目录 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号1 问题描述2 解决方案3 具体步骤4 效果测试5 小结与复盘 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号 1 问题描述 不知各位是否也为复制过来的文本中夹杂的回车换行符抓狂过?就是在复…...

Maven与Gradle的区别

Maven与Gradle是两种流行的构建工具,广泛用于Java项目的管理和构建。以下是它们的对比,包括官网、Windows 11配置环境、在IDEA中的相同点和不同点,以及它们各自的优缺点。 官网 Maven官网: https://maven.apache.orgGradle官网: https://gr…...

【linux 多进程并发】0202 Linux进程fork之后父子进程间的文件操作有着相同的偏移记录,多进程操作文件的方法

0202 Linux进程资源 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 020…...

SQLite在安卓中的应用

在 Android 应用程序中,SQLite 是默认的嵌入式数据库解决方案,Android 系统为开发者提供了相应的 API 来管理 SQLite 数据库。通过使用 SQLiteOpenHelper 类和 SQLiteDatabase 类,开发者可以方便地创建、查询、更新和删除数据库中的数据。 以…...

Python数据库操作

前面的章节中学习了使用 Python 读写文件的方法,大家可以用文件方式来存放数据,不过使用文件方式时不容易管理,同时还容易丢失,会带来许多问题。目前主流的方法都是采用数据库软件,通过数据库软件来组织和存放数据&…...

交叉熵损失函数为代表的两层神经网络的反向传播量化求导计算公式

反向传播(back propagation,BP)算法也称误差逆传播,是神经网络训练的核心算法。我们通常说的 BP 神经网络是指应用反向传播算法进行训练的神经网络模型。反向传播算法的工作机制究竟是怎样的呢?我们以一个两层&#xf…...

数据结构——八大排序(上)

数据结构中的八大排序算法是计算机科学领域经典的排序方法,它们各自具有不同的特点和适用场景。以下是这八大排序算法的详细介绍: 一、插入排序(Insertion Sort) 核心思想:将数组中的所有元素依次跟前面已经排好的元…...

vxe-table 导入导出功能全解析

一、vxe-table 导入导出功能概述 vxe-table 的导入导出功能在数据处理中具有至关重要的作用。在现代数据管理和处理的场景中,高效地导入和导出数据是提高工作效率的关键。 对于导入功能而言,它允许用户将外部的表格数据,如 Excel 文件&…...

常用STL的操作以及特点

C 标准模板库(STL)提供了很多常用的数据结构和算法,极大简化了开发工作。STL 包括容器(如 vector、list、map 等)、算法(如排序、查找等)以及迭代器。以下是一些常用 STL 容器的操作以及它们的特…...

025 elasticsearch索引管理-Java原生客户端

文章目录 pom.xml1创建索引2.创建索引并设置settings信息3.创建索引并设置mapping信息4.删除索引库5.给未设置mapping的索引设置mapping elasticsearch版本7.10.2,要求java客户端与之相匹配,推荐Springboot版本是2.3以上版本 依赖配置使用的是JUnit 5&am…...

Gin框架操作指南10:服务器与高级功能

官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…...

AIGC技术的学习 系列一

文章目录 前言一、AIGC技术演进1.1 图像视频生成1.2. 文本生成1.3. 多模态生成1.4. 小结二、CAD&CAE软件介绍2.1. CAD软件2.2. CAE软件2.3. 小结三、AIGC技术与CAD&CAE软件的集成案例3.1. 土建设计领域3.2. 机械设计领域四、结语五、参考文献总结前言 在全球智能制造的…...