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

news2024/12/26 13:26:24

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

目前已经更新到了:

  • 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"]
    }
  }
}

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

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

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

相关文章

Python 3.13 中的 7 个新类型特性

刚刚发布的 Python 3.13 继续挑战了效率和优雅的极限。 除了在 Python 社区讨论已久的令人兴奋的自由线程模式 和 Just-In-Time 编译器之外,吸引我的还有类型系统的新改进。 在早期版本引入的强大类型系统基础上,Python 3.13 将引入七个新的类型特性&a…

数学考研高分突破:解题思维与速度的双重修炼

随着考研季的临近,众多考生为了在数学这一科目中取得高分,纷纷投入到紧张的复习中,如何在有限的时间内,既提高解题思维,又提升解题速度,成为了许多考生心中的难题,本文将围绕这一主题&#xff0…

如何批量下载采集淘宝图片?3个方法可以帮助你

如何批量下载采集淘宝图片?在现代电子商务的背景下,淘宝作为中国最大的在线购物平台之一,承载了数以亿计的商品和信息。对于从事电商运营、市场推广或网络营销的人员而言,采集淘宝图片已经成为日常工作中的重要任务。这不仅是为了…

网页前端开发之HTML入门

HTML入门 HTML全称HyperText Markup Language,中文译为:超文本标记语言。 它有一个同胞兄弟叫:XML,全称Extensible Markup Language,中文译为:可扩展标记语言。 简单来讲,它们都是标记语言。 …

Excel重新踩坑2:Excel数据类型;自定义格式(设置显示格式);分列操作;其他常用操作;一些重要操作

0、Excel数据类型:文本、数字、逻辑值、错误值 文本数据类型:输入什么显示什么;常见错误值 VALUE:文本与数字运算; DIV/0:分母为0; NAME:公式名称错误; N/A:…

最新Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版图文教程

CleanMyMac X mac版下载是一款功能更加强大的系统优化清理工具,软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。CleanMyMac X for mac相比于 CleanMyMac3来说,功能增加了不少,比如新增…

【数据分析】影响系数 =(今日量-昨日量)/(今日总量-昨日总量)

1. 影响系数 影响系数是一个用来衡量两个相关变量之间变化关系的指标。在给定的公式中: 今日量:指的是当前时间点的某个特定变量的值,比如今天某个商品的销售数量。昨日量:指的是前一个时间点(通常是前一天&#xff…

实操部署amis-admin

当需要做一个web服务的时候,前端的实现很令我头疼。搜了一圈前端低代码框架后,注意到百度贡献的amis,通过json来写前端,很酷啊。不得不说,一个好的demo项目,真的能让人迅速进入状态,比直接看文档…

uniapp 省、市、区、乡镇 数据层级选择插件 Ba-DataPicker

Ba-DataPicker 是一款uniapp数据层级选择弹窗插件。支持省市区乡四级;支持自定义数据。 支持省、市、区、乡镇四级支持自定义数据支持字母检索 截图展示 支持定制、本地包、源码等,有建议和需要,请点击文章结尾“Uniapp插件开发”联系我&am…

高级prompt工程技巧:如何引导模型生成更精确的输出

在人工智能领域,提示词工程(Prompt Engineering)是提升模型输出质量的关键技术之一。通过精心设计的提示词,我们可以引导模型生成更符合预期的结果。本文将深入探讨几种高级提示词工程技巧,并提供实际操作的示例&#…

SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)

场景 需对接海康威视交通产品中的交通违章检测功能,实现车辆闯红灯时获取抓拍数据(车牌号)并获取上传的抓拍图片。 根据其官方资料设备网络SDK使用手册中说明,此流程需要可以通过报警布防方式进行。 访问官方下载SDK文档等资料 海康威视-引领智能物联…

华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)

环境以用户需求安装Centos7.9,服务器使用9块900G硬盘,创建RAID1和RAID6,留一块作为热备盘。 使用笔记本通过HDM管理口()登录 使用VGA()线连接显示器和使用usb线连接键盘鼠标,进行窗…

生成 Excel 表列名称

Excel 大家都用过,它的列名是用字母编号的,A 表示第一列,B 表示第二列,AA 表示第27列,AB 表示第28列等等。 现给定一个数字,如何得到列名称呢。比如输入28,输出 AB。 一开始以为就是一个简单的…

C++ 算法学习——1.9 Kruskal算法

Kruskal算法是一种用于解决最小生成树(Minimum Spanning Tree)问题的贪婪算法。 Kruskal算法步骤: 初始化:将图中的所有边按照权值从小到大进行排序。 创建并查集:为每个顶点创建一个集合,用于判断两个顶…

中国灌溉农田空间分布

针对全国灌溉农田空间分布数据缺失的现状,融合MODIS植被指数和统计数据生成MIrAD-GI临时灌溉数据集,再利用约束统计和协同绘图方法将其与中国区域现有灌溉数据进行集成、整合,生成了2000-2019年中国逐年灌溉农田分布数据集(500米空…

5、JavaScript(四)

25.ajax : 前端向后端异步的取数据而无需刷新页面的技术 1 公司中的整体工作流程 1、项目开发的流程 每个职位该做的工作: 产品经理:提需求的 与客户沟通 画出原型图给程序员使用 UI设计师:美化 替换UI框架:antd element-ui e…

python将照片集导出成视频

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 背景 一个安静的下午,看着电脑里乱七八糟的照片,有大有小,宽高不一,突然想找个方式把他们统一起来&…

SketchUp Pro 2024 for Mac 3D建模 草图设计大师软件安装【保姆级教程,简单小白轻松上手】

Mac分享吧 文章目录 SketchUp Pro 3D建模 草图设计大师软件 安装完成,软件打开效果一、Mac中安装SketchUp Pro 3D建模 草图设计大师软件——v241️⃣:下载软件2️⃣:安装软件,将安装包从左侧拖入右侧文件夹中3️⃣:应…

【数据结构】7道经典链表面试题

目录 1.返回倒数第K个节点【链接】 代码实现 2.链表的回文结构【链接】 代码实现 3.相交链表【链接】 代码实现 4.判断链表中是否有环【链接】 代码实现 常见问题解析 5.寻找环的入口点【链接】 代码实现1 代码实现2 6.随机链表的复制【链接】 代码实现 7.顺序…

DS堆的特性和实现(9)

文章目录 前言一、堆的概念和结构二、堆的调整算法向下调整算法向上调整算法两种算法建堆的时间复杂度 三、堆的实现结构体定义初始化和销毁堆的插入堆的删除挪移数据覆盖删除首尾交换再删除 获取堆顶元素获取有效数据个数判断是否为空 总结 前言 继续,本篇较难   …