ElasticSearch之search API

写在前面

本文看下查询相关内容,这也是我们在实际工作中接触的最多的,所以有必要好好学习下!

1:查询的分类

主要分为如下2类:

1:基于get查询参数的URI search
2:基于post body的request body search,需要用到es的dsl(domain sepecific language)

不管是哪种查询方式,都需要指定要查询的索引,如下几种方式:
在这里插入图片描述

分别来看下URI search和request body search。

另,测试数据参考这里 。

2:URI search

这种方式是通过在uri上设置参数来进行查询,可以设置的参数如下:

1:q 使用query string syntax,来指定要查询值,相对比较复杂,后边会单独看下
2:df,defaut field,默认字段,如果是不指定的话则会对所有字段查询
3:sort 排序
4:from,size,分页
5:profile,可以查看查询是如何被执行的

2.1:泛查询

  • 查询包含2012的文档
    在这里插入图片描述
    来看下其查询方式,在 “profile”->“shards”->“searches”,如下图:
    在这里插入图片描述
  • 泛查询指定df
    在这里插入图片描述
    看下查询方式:
    在这里插入图片描述

2.2:指定字段查询

在q中指定字段:
在这里插入图片描述
查询方式:
在这里插入图片描述

2.3:Term VS Phrase

假定现在我们要查询title中包含”Beautiful Mind“的文档信息,第一个想法可能是使用下边这种方式来查询:
在这里插入图片描述
但是,并不是我们期望的结果,我们通过查询方式来看下:
在这里插入图片描述
此时Mind是泛查询。.

同sql语句:

select * from t where title like "%Beautiful%"
union
(select * from t where title like "%Mind%"unionselect * from t where id like "%Mind%"unionselect * from t where year like  "%Mind%"...
)

那我们如何让es把”Beautiful Mind“当作一句话来查询呢,这就要用到PhraseQuery,也比较简单,只需要使用""括起来就行了:
在这里插入图片描述
看下查询方式:
在这里插入图片描述

2.4:分组查询

在这里插入图片描述

2.4.1:AND OR

  • AND
    在这里插入图片描述
    同写法:
    在这里插入图片描述
    即系统默认就是按照带+好处理的,即must,如果想要查询包含Beautiful但是不包含Mind的,则在Mind前用-
    在这里插入图片描述
    查询的过程是先执行如下的TermQuery title:beautiful查询到title包含Beautiful的结果集1,然后再执行TermQuery title:Mind查询到title包含Mind的结果集2,然后取A和B的差集获取最终结果:
    在这里插入图片描述
  • OR
    在这里插入图片描述
    和AND比较类似,可对比学习。

2.4.2:范围查询

在这里插入图片描述
实例们:
在这里插入图片描述

2.4.3:通配符,模糊,正则

在这里插入图片描述
实例们:
在这里插入图片描述

3:request body search

3.1:查询所有

在这里插入图片描述
查询方式可以看到是MatchAllDocsQuery

3.2:查询所有

在这里插入图片描述
可以看到虽然是分页查询,但是查询方式和全量查询是一样的,都是MatchAllDocsQuery,并且查询越往后的数据,效率越低,所以es最好不要用来做分页查询,通过其他方案来实现。

3.3:排序

在这里插入图片描述
查询方式可以看到是MatchAllDocsQuery,所以效率也不会高,要慎用。

3.4:只返回指定字段

在这里插入图片描述
正常相当于sqlselect *这里相当于sqlselect order_date,order_id

3.5:脚本字段

在这里插入图片描述
相当于sqlselect concat('order_date', '_hello') as 'my_custom_field'

3.6:match查询

在这里插入图片描述
效果同uri searchGET movies/_search?q=title:(Last OR Christmas),即默认的操作符是OR,可以使用operator来显式指定操作符:
在这里插入图片描述

3.7:match_phrase 短语查询

在这里插入图片描述
等同于uri searchGET movies/_search?q=title:"Last Christmas"
允许中间有其他单词,可如下搜索:
在这里插入图片描述
等同于uri searchGET movies/_search?q=title:"one love"~1

3.8:query_string 查询

dsl的query下写query_string有点像泛查询。
在这里插入图片描述
同uri searchGET movies/_search?q=on。其实就是不同的写法而已,多一种写法,多个选择,适应更多的应用场景。
当然也可以指定字段,增加default_field即可:
在这里插入图片描述

3.9:simple_query_string 查询

dsl的query下写simple_query_string有点像泛查询。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有需要用query string就行了,这里知道即可。

写在后面

参考文章列表

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

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

相关文章

【算法】基础算法模板

文章目录 一、快速排序二、归并排序三、二分1. 二分的本质2. 整数二分3. 实数二分 四、前缀和1. 一维前缀和2. 二维前缀和 五、差分1. 一维差分2. 二维差分 六、常用位运算1. 求二进制的第 k 位2. lowbit 七、其他常用算法1. 去重2. 表达式求值3. 单调栈4. 单调队列5. 并查集 一…

Go语言安全编码:crypto/sha1库全面解析

Go语言安全编码:crypto/sha1库全面解析 简介SHA-1基础原理和特点SHA-1与其他哈希算法的比较代码示例:基本的SHA-1哈希生成 使用crypto/sha1处理数据处理字符串和文件的SHA-1哈希代码示例:为文件生成SHA-1哈希 常见错误和最佳实践 在实际项目中…

leetcode(双指针)283.移动零(C++详细题解)DAY3

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 示例 1: 输入…

fpga 需要掌握哪些基础知识?

个人根据自己的一些心得总结一下fpga 需要掌握的基础知识,希望对你有帮助。 1、数电(必须掌握的基础),然后进阶学模电, 2、掌握HDL(verilog或VHDL)一般建议先学verilog,然后可以学…

【笔记】Helm-5 Chart模板指南-9 在模板内部访问文件

在模板内部访问文件 在上一节中,我们研究了几种创建和访问模板的方法。这样可以很容易从一个模板导入到另一个模板中。但有时想导入的是不是模板的文件并注入其内容,而无需通过模板渲染发送内容。 Helm提供了通过.Files对象访问文件的方法。不过&#x…

【Make编译控制 06】CMake初步使用

目录 一、概述与安装 二、编译源文件 三、无关文件管理 一、概述与安装 CMake是一个跨平台的项目构建工具,相比于Makefile,CMake更加高级,因为CMake代码在执行的时候是会先翻译生成Makefile文件,再调用Makefile文件完成项目构…

辅警考试怎么搜答案?这4款足够解决问题 #微信#知识分享

对于大学生来说,每天面对各式各样的学习任务和问题,寻找合适的学习资源和工具成了我们的迫切需求。幸运的是,现如今有许多高效且实用的日常搜题和学习软件可以满足我们的需求,助力我们取得更好的学习成果。 1.颐博查题 这是一个…

Django问题报错:TypeError: as_view() takes 1 positional argument but 2 were given

一、错误位置 from django.urls import pathfrom users_app.views import RegisterView, LoginView, LogoutViewapp_name users urlpatterns [path("register/", RegisterView.as_view, name"register"),path("login/", LoginView.as_view, n…

Netty中的常用组件(三)

ChannelPipeline 基于Netty的网路应用程序中根据业务需求会使用Netty已经提供的Channelhandler 或者自行开发ChannelHandler,这些ChannelHandler都放在ChannelPipeline中统一 管理,事件就会在ChannelPipeline中流动,并被其中一个或者多个Chan…

VED-eBPF:一款基于eBPF的内核利用和Rootkit检测工具

关于VED-eBPF VED-eBPF是一款功能强大的内核漏洞利用和Rootkit检测工具,该工具基于eBPF技术实现其功能,可以实现Linux操作系统运行时内核安全监控和漏洞利用检测。 eBPF是一个内核内虚拟机,它允许我们直接在内核中执行代码,而无…

什么是Java中的NIO(New I/O)?与传统的I/O有什么不同?

什么是Java中的NIO(New I/O)?与传统的I/O有什么不同? Java NIO(New I/O)是Java 1.4引入的一组用于非阻塞I/O操作的API。与传统的I/O(即普通的阻塞I/O)相比,Java NIO提供…

CVE-2022-0760 漏洞复现

CVE-2022-0760 NSS [HNCTF 2022 WEEK2]ohmywordpress 【CVE-2022-0760】 题目描述:flag在数据库里面。 开题: 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面,有一个搜索框。 F12看看network。 又出现了这个Wor…

华为数通方向HCIP-DataCom H12-821题库(单选题:461-480)

第461题 以下关于路由策略特点的描述,错误的是哪一项? A、能够修改路由属性,但是不能改变网络流量经过的路径 B、能通过控制路由器的路由表规模,来节约系统资源 C、能通过控制路由的接收、发布和引入,以提高网络的安全性 D、能通过修改路由属性,对网络数据流量可以合理规…

Python爬虫之关系型数据库存储#5

关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与…

Java异常的处理 try-catch-finally

目录 什么是异常通过if-else处理异常用if-else堵漏洞的缺点 try-catch例第一种处理第二种处理第三种处理第四种处理 try-catch-finally例 System.exit(0);//终止当前的虚拟机执行 什么是异常 Exception:在程序的运行过程中,发生了不正常的现象&#xff0…

SpringCloud-Ribbon实现负载均衡

在微服务架构中,负载均衡是一项关键的技术,它可以确保各个服务节点间的负载分布均匀,提高整个系统的稳定性和性能。Spring Cloud 中的 Ribbon 就是一种负载均衡的解决方案,本文将深入探讨 Ribbon 的原理和在微服务中的应用。 一、…

12 ABC串口接收原理与思路

1. 串口接收原理 基本原理:通过数据起始位判断要是否要开始接收的数据,通过采样的方式确定每一位数据是0还是1。 如何判断数据起始位到来:通过边沿检测电路检测起始信号的下降沿 如何采样:一位数据采多次,统计得到高…

curl8.6.0 - CURLE_PEER_FAILED_VERIFICATION

文章目录 curl8.6.0 - CURLE_PEER_FAILED_VERIFICATION概述笔记END curl8.6.0 - CURLE_PEER_FAILED_VERIFICATION 概述 在看一个开源工程, 里面用到了curl和openssl, 但是工程使用vcpkg来管理的包, 用CMake来编译 依赖太多了, win10 编译选项为 vs2019 x64/Win32(或者Ninja)…

从零开始:用 Rust 编写你的第一个 Web 服务

Rust 是一种现代、高性能的编程语言,近年来在 Web 开发领域也有了一席之地。本文将介绍如何使用 Rust 编写一个简单的 Web 程序,从搭建开发环境到创建第一个 Web 页面。 1. 开发环境搭建 首先,确保你已经安装了 Rust 工具链。你可以通过在终…

肯尼斯·里科《C和指针》第12章 使用结构和指针(1)链表

只恨当时学的时候没有读到这本书,,,,,, 12.1 链表 有些读者可能还不熟悉链表,这里对它作一简单介绍。链表(linked list)就一些包含数据的独立数据结构(通常称为节点)的集…