谷粒商城实战笔记-110~114-全文检索-ElasticSearch-查询

news2024/11/24 12:03:01

文章目录

  • 一,110-全文检索-ElasticSearch-进阶-两种查询方式
  • 二,111-全文检索-ElasticSearch-进阶-QueryDSL基本使用&match_all
  • 三,112-全文检索-ElasticSearch-进阶-match全文检索
  • 四,113-全文检索-ElasticSearch-进阶-match_phrase短语匹配
  • 五,114-全文检索-ElasticSearch-进阶-multi_match多字段匹配

一,110-全文检索-ElasticSearch-进阶-两种查询方式

Elasticsearch两种基本的检索方式使用Elasticsearch REST API的说明:

  1. 使用REST request URI发送搜索参数
    这种方式是通过GET请求将查询参数附加在URL上。这适用于简单的查询,并且可以很容易地在浏览器中测试。例如,上面的查询示例:

    GET bank/_search?q=*&sort=account_number:asc
    
    • GET 是HTTP方法,用于请求从服务器获取资源。
    • bank 是索引的名称。
    • _search 是一个特殊的端点,用于执行搜索查询。
    • q=* 是查询参数,* 表示搜索所有文档。
    • sort=account_number:asc 指定了排序方式,这里按照account_number字段升序排序。
  2. 使用REST request body发送搜索参数
    这种方式是通过POST请求发送一个JSON格式的请求体。它提供了更复杂的查询能力,并且可以包含多个查询参数和选项。例如,上面的查询示例:

    POST bank/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {
          "account_number": {
            "order": "desc"
          }
        }
      ]
    }
    
    • POST 是HTTP方法,通常用于向服务器提交要被处理的数据。
    • bank/_search 同样指定了索引和搜索端点。
    • 请求体中的 "query": { "match_all": {} } 定义了一个查询,match_all 查询将匹配所有文档。
    • "sort" 数组定义了排序规则,这里指定了按照account_number字段降序排序。

两种方式的主要区别在于查询的复杂性和灵活性。使用URI的方式简单直观,适合快速测试和简单的查询。使用请求体的方式则更适合复杂的查询,可以包含更多的选项和参数。

二,111-全文检索-ElasticSearch-进阶-QueryDSL基本使用&match_all

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "desc"
      }
    }
  ],
  "from": 5,
  "size": 5,
  "_source": ["balance", "firstname"]
}
  1. GET bank/_search:这是HTTP请求的开始,其中GET是请求方法,bank是索引的名称,_search是执行搜索查询的端点。

  2. "query": {:定义查询的开始。

  3. "match_all":():这是一个查询子句,match_all查询会匹配所有文档。括号()在这里应该是空的,因为match_all查询不需要任何参数。

  4. 'sort": [:这个部分看起来像是一个语法错误,因为sort关键字后面紧跟着一个单引号',这可能是一个复制粘贴错误。正确的应该是"sort": {,用于定义排序规则。

  5. "balance"::这是排序规则的一个字段,表示按照balance字段进行排序。

  6. "orden": "desc":指定排序的顺序,"desc"表示降序排序。

  7. "from": 5,:定义从结果的哪个位置开始返回,这里设置为5,意味着从第6个结果开始返回。

  8. "size": 5,:定义返回结果的数量,这里设置为5,意味着返回5个结果。

  9. _source": ["balance","firstname"]:定义返回的源字段,这里指定返回balancefirstname字段的值。

在这里插入图片描述

这个查询会从bank索引中检索所有文档,按照balance字段降序排序,跳过前5个结果,然后返回接下来的5个结果,并且只返回每个结果的balancefirstname字段。

三,112-全文检索-ElasticSearch-进阶-match全文检索

match query是一种模糊匹配,查询时会将关键词进行分词处理,然后基于倒排索引进行匹配,对于匹配到的结果进行打分,返回结果按照评分进行排序。

如下查询。


GET bank/_search
{
  "query": {
    "match": {
      "address": "mill"
    }
  }
}

这个查询同样是针对Elasticsearch的"bank"索引的一个搜索请求,使用match查询来执行全文搜索。

  • GET bank/_search: 这表示使用HTTP GET方法发起请求,目的是对"bank"索引进行搜索。

  • "query": 这部分定义了搜索的查询条件。

  • "match": 这是Elasticsearch中用于执行全文搜索的查询类型,它会在指定的字段上进行搜索。

  • "address": 这是要搜索的字段名称,即文档中的"address"字段。

  • "Mill road": 这是搜索的关键词,查询会寻找"address"字段中包含"Mill road"这个确切短语的文档。

匹配查询有两种可能:

  1. 完全匹配: 文档的"address"字段完全包含"Mill road"这个短语,例如:“123 Mill road”。

  2. 部分匹配: 搜索关键词"Mill road"会被分词为"mill"和"road",如果"address"字段包含"Mill"和"road",就会被匹配到,如"198 Mill Lane"或"263 Aviation Road"。

在这里插入图片描述
查询结果显示,一共有32个文档被匹配,每个结果都有评分,最高评分是8.926605,返回结果默认按照评分降序排序。显然,评分最高的是与搜索关键词匹配度最高的文档。

四,113-全文检索-ElasticSearch-进阶-match_phrase短语匹配

match_phrasematch类似,都是在指定的字段中进行全文搜索,不同的是match_phrase要匹配整个短语中所有的词,match匹配单个词就算命中,match_phrase查询还关注词的顺序和位置,它返回的是那些在指定字段中包含整个短语的文档。

以下是match_phrase查询的一些关键点:

  1. 短语匹配: match_phrase会寻找包含整个短语的文档,而不是单独的词。

  2. 词序: 它匹配的是短语中词的顺序,即短语中的词必须按照指定的顺序出现。

  3. 位置敏感: 短语中的词之间可以有其他词,但它们必须在短语中指定的顺序内。

  4. 使用场景: 当你需要搜索包含特定短语的文档时,比如搜索包含完整地址或名称的文档,match_phrase是一个很好的选择。

  5. 性能: 由于match_phrase查询需要考虑词的顺序和位置,它可能比match查询在性能上要慢一些。

  6. 分析器: 与match查询一样,match_phrase也受到字段使用的分析器的影响。不同的分析器可能会影响搜索结果。

  7. 语法: match_phrase查询的语法与match类似,但是它更专注于短语的完整性和顺序。

这里是一个使用match_phrase查询的示例:

GET bank/_search
{
  "query": {
    "match_phrase": {
      "address": "Mill Road"
    }
  }
}

在这个示例中,查询会寻找"address"字段中包含"Mill Road"这个确切短语的文档,并且词的顺序和大小写都需要匹配。如果"address"字段包含"Mill Road",但是顺序或大小写不同,或者两个词中间有其他词,那么这些文档将不会被匹配。

五,114-全文检索-ElasticSearch-进阶-multi_match多字段匹配

multi_match查询允许在多个字段上执行相同的搜索查询,只要一个字段匹配,这条记录就会被命中。

下面是一个使用multi_match查询的示例:

GET bank/_search
{
  "query": {
    "multi_match": {
      "query": "Albemarle",
      "fields": ["address", "firstname"]
    }
  }
}

在这个示例中,查询会在addressfirstname字段上搜索包含"Albemarle"的文档。如果这些字段中的任何一个包含这个短语,文档就可能被返回在搜索结果中。

如下,firstname包含Albemarleaddress中不包含Albemarle,但文档也会被命中。

在这里插入图片描述

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

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

相关文章

HarmonyOS 用List组件实现组合列表项

界面分析: 由于整体UX设计图符合从上至下的布局,所以可以采用Column组件作为外层容器 简介: 最上方的标题可以使用Text组件进行加载渲染中间的Banner图和简介分别可以使用Image组件和Text组件进行加载最后一部分可以看作是一个列表&#xf…

在PAI-DSW中连接Neo4J,并批量创建知识图谱

我在 阿里云DSW实例中安装并运行Neo4J 中提到过,由于PAI-DSW的专有网络配置不能确保百分之百成功,因而很难实现通过本地的浏览器登录在PAI-DSW中启动的Neo4J图数据库。 我当时想出的一个解决办法是使用./cypher-shell语句在命令行登录neo4j,…

工业5G路由器赋能户外组网远程监控及预警

随着物联网、大数据、云计算等技术的快速发展,工业领域对于远程监控、实时预警和数据传输的需求日益增长。特别是在户外复杂环境下,传统的有线网络组网方式面临着布线难度大、成本高、维护困难等问题。 工业5G路由器在户外组网远程监控预警应用基于高速…

Golang 并发控制模型

文章目录 Golang 并发控制模型一、使用 channel 通知实现并发控制1、无缓冲通道2、有缓冲通道 二、使用 sync 包中的 WaitGroup 实现并发控制1、sync.WaitGroup2、sync.Once 三、使用 Context 上下文实现并发控制1、简介2、context 包3、继承 context4、context 例子5、context…

基于springMVC的图书管理系统

进度终于来到了springMVC,下次估计就是springboot了,感觉每次开始新框架,环境都是大问题,项目一共敲四天,环境卡三天。总结一下这次碰到的问题和解决方法吧。 问题和解决方法 1、controller中return无法跳转到界面&a…

【安装】Linux Centos 或 Debian 离线安装指定版本MariaDB

【安装】Linux Centos 或 Debian 离线安装指定版本MariaDB 下载地址 https://mariadb.com/downloads/community/community-server/https://mirrors.aliyun.com/mariadb/yum/https://mariadb.com/downloads/community/community-server/ Download MariaDB Server - MariaDB.or…

NineData云原生智能数据管理平台新功能发布|2024年7月版

本月发布 12 项更新,其中性能优化 3 项、功能优化 8 项、安全性发布 1 项。 1. 性能优化 数据复制 - SQL Server 增量性能优化 调整读取和写入方式,让 SQL Server 增量复制的性能轻松达到 5000 RPS 以上。 数据复制 - Doris|SelectDB|StarRocks 性能优…

数据库原理之多表查询——使用Mysql进行内连接和外连接

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:Idea 目录 1.内连接 1.1隐式内连接 1.1.1定义 1.1.2举例 1.1.3优缺点 1.2显式内连接 1.2.1定义 1.2.2举例 1.2.3优缺点 2.外连接 2.1左外连接 2.1.1定义 2.1.2举例 2.…

Creomagic 推出认知通信功能以应对电子战 (EW) 威胁

新时代的软件定义无线电 (SDR) 技术可以在电子战和竞争频谱环境中自主维护可靠的网络。 最近的全球冲突凸显了现代战场上战术通信面临的严峻挑战。随着自主部队的日益普及,战场感知变得比以往任何时候都更加先进,需要大量信息传输和同步。在战场上传输关…

【OpenCV C++20 学习笔记】腐蚀和膨胀

腐蚀和膨胀 形态学原理膨胀腐蚀 代码实现膨胀函数腐蚀函数运行结果 形态学原理 腐蚀和膨胀通常有以下用途: 去除噪音分离或合并图像中的元素找出图片上的强度的极大值区域和极小值区域 以下图作为原始图片: 膨胀 用核 B B B来扫描图像 A A A&#xff…

Python数值计算(12)——线性插值

1. 概述 插值是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计的方法。最简单直观的一种插值方式是线性插值,它是…

MuseTalk - 数字人唇部同步

文章目录 一、关于 MuseTalk概览新闻模型案例待办事项:第三方集成 二、安装构建环境mmlab 软件包下载 ffmpeg-static下载权重 三、快速入门推理使用 bbox_shift 以获得可调整的结果结合 MuseV 和 MuseTalk🆕实时推理实时推理注意事项 四、其它致谢限制引…

Taro学习记录

一、安装taro-cli 二、项目文件 三、项目搭建 1、Eslint配置 在项目生成的 .eslintrc 中进行配置 {"extends": ["taro/react"], //一个配置文件,可以被基础配置中的已启用的规则继承"parser": "babel/eslint-parser…

1688中国站获得工厂档案信息 API

公共参数 名称类型必须描述keyString是免费申请调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认y…

【动态规划-最大子段和】力扣1191. K 次串联后最大子数组之和

给定一个整数数组 arr 和一个整数 k ,通过重复 k 次来修改数组。 例如,如果 arr [1, 2] , k 3 ,那么修改后的数组将是 [1, 2, 1, 2, 1, 2] 。 返回修改后的数组中的最大的子数组之和。注意,子数组长度可以是 0&…

Delphi5实现多窗体

效果图 新建窗体 窗体的显现 procedure TForm2.btn2Click(Sender: TObject); beginForm1.Show;Form2.Hide; end;第一个窗体完整代码 注意引用第二个窗体 unit Unit1;interfaceusesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Dialogs, Forms,Form…

《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端

引出 《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端 第3集:2000年代/数据库分型及国产数据库开端 y2k问题 千年虫,又叫做“计算机2000年问题”“电脑千禧年千年虫问题”或“千年危机”。缩写为“Y2K]”。是指在某些使用了计算机…

ESP8266 完结日志 2024/8/2 23:50

呼!经历这么长 的时间终于完工了, 从零开始一步一步走过来,还是有一丢丢成就感的 功能: 上传文件 控制引脚 获取信息 重启设备 清空flash 期间接触:web开发 uni-app开发 c开发 python 开发 MQTT AI很棒,棒到我任何问题都想问AI, 甚至一丢丢逻辑下的操作都期盼AI解决. 抖音也…

yolov5的学习part1

还是基础的anoconda,在opencv的时候就已经安装过了 此视频疑似在2020年底录制,因为他安装anaconda使用如下代码 bash ~/Downloads/Anaconda3-2020.07-Linux-x86_64.sh 由于版本兼容问题,可能要mini conda PASCAL VOC PASCAL VOC挑战赛在…

Node.js(6)——npm软件包管理

npm npm是Node.js标准的软件包管理器。 使用: 初始化清单文件:npm init-y(得到package.json文件,有则略过此命令)下载软件包:npm i 软件包名称使用软件包 示例: 初始状态下npm文件夹下只有server.js,下载软件包前看…