Elasticsearch 基本使用(二)简单查询 嵌套查询

news2024/11/20 20:28:40

查询数据

    • 简单查询
      • 按id查询单条记录
      • 查询所有数据
      • 设置排序
      • filter 过滤
      • 查询数组内的值查询
    • 嵌套查询
      • 查询一个外层字段 内的嵌套字段
      • 查询多个字段,其中有嵌套字段

简单查询

按id查询单条记录

GET bank/_doc/1

在这里插入图片描述

查询所有数据

  • 默认只查询10条记录
GET bank/_search
{
  "query": {
    "match_all": {}
  }
}

在这里插入图片描述

  • 设置分页条件
GET bank/_search
{
  "query": {
  # 无条件查询
    "match_all": {}
  },
  # 偏移量,从第一条开始查
  "from": 0,
  # 记录条数
  "size": 1000
}

设置排序

两种设置方式

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "字段名": "asc"
    },
    {
      "字段名": {
        "order": "desc/asc"
      }
    }
  ]
}

注意:_id 为字符串,其排序方式为按位比较,并非数值大小

filter 过滤

在 bool 查询内,可以使用 filter 对数据进行过滤。
单从最终数据来看,filter 也是用于过滤数据,用于条件查询。
不同点在于,filter 查询的结果不进行评分,但也不影响bool查询内其他查询的评分结果。

# 查询 age = 10 & province = 600 的数据
# 使用 filter 过滤,filter 仅过滤数据,而不进行评分,当然也不影响 使用 query 内其他查询的评分结果
GET /stu/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "address",
            "query": {
              "term": {
                "address.province": {
                  "value": "600"
                }
              }
            }
          }
        }
      ],
      "filter": [
        {
          "term": {
            "age": 10
          }
        }
      ]
    }
  }
}

查询数组内的值查询

ES没有数组一说,对数组值的查询就像普通值那样查询即可。
数组内其中一项匹配就算成功

# 查询 hobbies 包含 swimming 或者 music 的数据
GET /stu/_search
{
  "query": {
    "terms": {
      "hobbies": [
        "movie",
        "music"
      ]
    }
  }
}

可以查到以下数据


      {
        "_index" : "stu",
        "_type" : "_doc",
        "_id" : "jjoE7YgBKFUjhQBi3mz1",
        "_score" : 1.0,
        "_source" : {
          "id" : 2,
          "name" : "李四",
          "age" : 20,
          "hobbies" : [
            "music",
            "speaking",
            "drive"
          ],
          "address" : [
            {
              "province" : "500",
              "city" : "025",
              "county" : "1993"
            },
            {
              "province" : "502",
              "city" : "027",
              "county" : "1999"
            }
          ]
        }
      },
      {
        "_index" : "stu",
        "_type" : "_doc",
        "_id" : "jzoE7YgBKFUjhQBi_2zu",
        "_score" : 1.0,
        "_source" : {
          "id" : 3,
          "name" : "张三四",
          "age" : 30,
          "hobbies" : [
            "movie",
            "book",
            "swimming"
          ],
          "address" : [
            {
              "province" : "600",
              "city" : "021",
              "county" : "1887"
            },
            {
              "province" : "601",
              "city" : "073",
              "county" : "1953"
            }
          ]
        }
      }
    

嵌套查询

有时,我们查询的条件字段不在最外层;此时需要使用嵌套查询

  • 如果多个条件是在一个 nested 字段内,则可以在netsted 内的query 中使用 bool 查询
  • 如果多个条件不在同一个 nested 字段内,则在外层query中使用 bool 查询

查询一个外层字段 内的嵌套字段

GET xxx_index/_search
{
  "query": {
  	# 嵌套查询,其他字段该怎么查怎么查,如果还有不属于这个嵌套字段的其他条件,依然使用 bool ,处理
    "nested": {
      "path": "外层字段名",
      # 基于这个path,当前的层级,再写一个 普通的query
      "query": {
        "bool": {
        	# 多条件
          "must": [
            {
              "term": {
                "外层字段名.内层字段名1": 条件值1
              }
            },
            {
              "match_phrase": {
                "外层字段名.内层字段名2": 条件值2
              }
            }
          ]
        }
      }
    }
  }
}

查询多个字段,其中有嵌套字段

# 一个嵌套字段 & 一个普通字段
GET xxx_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "外层字段名1",
            "query": {
              "term": {
                "外层字段名1.内层字段名1": 条件值1
              }
            }
          }
        },
        {
          "match": {
            "外层字段名2": " 条件值2"
          }
        }
      ]
    }
  }
}

如果还有,其他外层字段,依旧在 外层 bool 里面加条件。

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

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

相关文章

Linux任务调度、磁盘分区、挂载

一、任务调度介绍 任务调度是指系统在某个时间执行的特定的命令或程序 任务调度分为两类: 1.系统工作:有些重要的工作必须周而复始的执行,比如病毒扫描 2,个别用户工作:个别用户可能希望执行某些程序,比如…

canvas自定义绘制顺序解决遮挡问题

canvas自定义绘制顺序解决遮挡问题 1. 问题场景2. 解决思路3. 实现代码 1. 问题场景 使用canvas绘制进行要素叠加时,往往会出现不是按照先画的在下面,后画的在最上面这样的顺序进行叠加显示。原因就是由于图片大小不同导致绘制或加载的时间不一样&#…

合宙Air724UG Cat.1模块硬件设计指南--LCD专用SPI接口

概述 Air724UG支持一路LCD专用SPI接口,用于驱动SPI LCD屏幕,不能作为通用SPI使用 特性: 最大支持320240分辨率,30帧 内置图像处理单元GOUDA 支持格式: YUV4 : 2 : 0 ;YUV4 : 2 : 2;RGB565; ARGB8888 目前只支持4线8bi…

MySQL - 第8节 - MySQL复合查询

1.基本查询回顾 准备测试表: • 下面给出三张表,分别是员工表(emp)、部门表(dept)和工资等级表(salgrade)。 • 后续所要进行的查询操作都将以这三张表作为数据源,包括基…

【论文笔记】BEIT:BERT PRE-TRAINING OF IMAGE TRANSFORMERS

GitHub 1.介绍 1.1 挑战 视觉转换器的输入单元,即图像补丁,没有预先存在的词汇。预测遮罩面片的原始像素往往会在预训练短程依赖性和高频细节上浪费建模能力 1.2 回顾一下Bert的基本架构和流程 输入编码:通过tokenizer将输入的文本中的每…

gmpy2

简介 gmpy2是一个Python扩展模块,是对GMP的封装,它的前身是gmpy。 GMP(即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数、实数、浮点数的高精度运算,还有随机数生成&a…

【promptulate专栏】使用ChatGPT和XMind快速构建思维导图

本文节选自笔者博客:https://www.blog.zeeland.cn/archives/ao302950h3j 💖 作者简介:大家好,我是Zeeland,全栈领域优质创作者。📝 CSDN主页:Zeeland🔥📣 我的博客&#…

Go语言基础:标识符、关键字、变量、常量、iota

一、标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 二、关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符…

ThreadPoolExecutor的应用和源码分析

前面描述的线程池的创建方式大都是Executors类中创建出来,基于ThreadPoolExecutor去new出来实现的。 我们为什么要自定义线程池 在线程池ThreadPoolExecutor中提供了7个参数,都作为非常核心的属性,在线程池去执行任务的时候,每个…

【Docker】容器化和虚拟化基础

Docker发展史 Jail(监狱)时代 1979 年 贝尔实验室发明 chroot chroot的设计原理是:把一个进程的文件系统隔离起来。 ​ chroot 系统调用可以将进程及其子进程的根目录更改为文件系统中的新位置。隔离以后,该进程无法访问到外面的文件,因此这…

管理类联考——逻辑——知识篇——论证推理——二、加强——haimian

考点分析 加强 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量213325356 主要问法 以下哪项如果为真,最能加强上述结论的说服力?以下哪项如果为真,最能支持题干的论证? 解题思路 阅读问题,确定是否为加强题型&…

进程参数编程

问题 execve(...) 的参数分别是什么?有什么意义? 第一个参数是程序路径,第二个参数是进程参数,第三个参数是环境变量 再论 execve(...) main 函数 (默认进程入口) int main(int argc, char* argv[]) argc - 命令行参数个数argv…

java——jdbc编程

文章目录 JDBC的概念JDBC的常用APIJDBC示例代码PreparedStatementCallableStatement JDBC(Java Database Connectivity)是Java的一种数据库访问标准,它提供了一套API,使得我们可以通过Java程序来访问和操作各种关系型数据库。 下面…

从零开始手搓一个STM32与机智云的小项目——GPIO模拟时序控制外设2

文章目录 前言模块简介硬件介绍硬件连接通信时序DHT11的数据帧格式信号时序1. 起始信号2.应答信号(响应信号)3.接收数据0与14.获取数据5结束信号 输入输出切换实际效果 总结 前言 在上一篇中介绍了,使用GPIO模拟WS2812B的控制时序来实现对RGB灯的控制,本…

【开源与项目实战:开源实战】84 | 开源实战四(上):剖析Spring框架中蕴含的经典设计思想或原则

在 Java 世界里,Spring 框架已经几乎成为项目开发的必备框架。作为如此优秀和受欢迎的开源项目,它是我们源码阅读的首选材料之一,不管是设计思想,还是代码实现,都有很多值得我们学习的地方。接下来,我们就详…

Nginx服务的主配置文件 nginx.conf

目录 前言 一、Nginx.con位置 二、Nginx.com相关内容 三、Nginx.conf中配置块和指令 1、I/O时间配置 2、HTTP 配置 日志格式设定 总结 前言 Nginx 的主配置文件是 nginx.conf,它通常位于 Nginx 的安装目录下的 conf 文件夹中。主配置文件 nginx.conf 是 Ngin…

Rust语言从入门到入坑——(6)Rust组织管理

文章目录 0 引入1、组织概念1. 1、箱1. 2、包1. 3、模块 2、组织中权限2.1 权限2.2 模块引用2.2 Use 关键词 3、总结 0 引入 任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。本教程到目前为止所有的程序都是在一个…

java——内部类和异常处理

文章目录 内部类成员内部类局部内部类匿名内部类静态内部类 异常处理异常捕获与处理多重异常捕获和处理抛出异常 内部类 Java内部类(Inner Class)是嵌套在其他类中的类,它可以访问外部类的成员变量和方法,同时也可以被外部类访问…

模拟电路系列文章-ADC驱动电路(下)

目录 概要 整体架构流程 技术名词解释 技术细节 1.低阻输出,以减小误差 2.抗混叠 3.电源级保护 小结 概要 提示:这里可以添加技术概要 一个模拟电压信号,在进入ADC 的输入端之前,一般都需要增加一级驱动电路(Driver]。但是&#…

C语言基础:指针的使用

本文结合工作经验,研究C语言中指针的用法。 文章目录 1 指针的概念2 用法与使用场景2.1 函数的指针参数2.1.1 基本概念2.1.2 使用场景1-函数返回多个值2.1.3 使用场景2-减少函数参数 2.2 void*指针2.2.1 基本概念2.2.2 使用场景 2.3 空指针2.4 const指针2.4.1 基本…