当前位置: 首页 > 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…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...