ElasticSearch:查询操作合集

先看下我的数据:
在这里插入图片描述

1、查询所有文档:

GET /cartest/_search

或者

GET /cartest/_search
{
  "query": {
    "match_all": {}
  }
}

2、匹配查询:

match匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系

GET /cartest/_search
{
  "query": {
    "match": {
      "name": "风云"
    }
  }
}

在这里插入图片描述

3、字段匹配查询:

multi_match 与match类似,不同的是它可以在多个字段中查询。

在这里插入图片描述

4、关键字精准查询:

这个term查询不对查询条件进行分词,
要是text文本类型就会出错,keyword可以进行此类查询

这里我们查 name:风云 就什么都没查到
在这里插入图片描述
向 cartest 中再加一个keyword类型的class字段

PUT /cartest/_mapping
{
	 "properties": {
		 "class":{
			 "type": "keyword",
			 "index": true
		 }
	 } 
}

在这里插入图片描述
添加一条数据

POST /cartest/_doc
{
  "name": "wang",
  "page": "cn",
  "say": "欢迎",
  "time": "2020-12-11",
  "class": "box"
}

在这里插入图片描述
我们再次查询:

GET /cartest/_search
{
   "query": {
     "term": {
       "class": {
        "value": "box"
       }
     }
   }
}

在这里插入图片描述

5、多关键字查询:

terms 查询和term 查询一样,但它允许你指定多值进行匹配。
如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于 mysql 的 in
当然,一定要记得查询的字段为关键字keyword类型,不然查不到内容

GET /cartest/_search
{
   "query": {
     "terms": {
       "class": ["box", "box-1"]
     }
   }
}

在这里插入图片描述

6、组合查询:

bool把各种其它查询通过must(必须 )、must_not(必须不)、should(应该)的方式进行组合

在这里插入图片描述

7、范围查询:

操作符说明
gt大于>
gte大于等于>=
lt小于<
lte小于等于<=

查询 num 100 - 150之间的数据

GET /cartest/_search
{
  "query": {
   "range": {
     "num": {
       "gte": 100,
       "lte": 150
     }
   }
  }
}

在这里插入图片描述
查询 04 - 06号之间的数据
在这里插入图片描述

8、分页查询+排序:

也可设置多字段排序,主次为代码顺序

GET /cartest/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "num": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 3
}

在这里插入图片描述
当然也可以按时间排序
在这里插入图片描述
9、查询需要的字段

GET /cartest/_search
{
  "_source": ["name", "time", "num"],
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "time": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 3
}

在这里插入图片描述
10、过滤查询:

includes:来指定想要显示的字段
excludes:来指定不想要显示的字段

只显示 name time 字段
在这里插入图片描述
不显示 name time 字段
在这里插入图片描述

11、聚合查询:

聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by,当然还有很
多其他的聚合,例如取最大值、平均值等等。

获取 num 最大值,size是 hits中数值的数量

GET /cartest/_search
{
  "aggs": {
    "max_age": {
      "max": {
        "field": "num"
      }
    }
  },
  "size": 0
}

在这里插入图片描述
平均值:
在这里插入图片描述
12、正则查询

GET /cartest/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "regexp": {
            "name": ".*云.*"
          }
        }
      ]
    }
  }
}

在这里插入图片描述
13、多层数据查询

GET /testes/_search
{
  "query": {
    "match": {
      "fun.active": "进行中"
    }
  }
}

在这里插入图片描述
14、nested:嵌套数据类型,可以看成是一个特殊的对象类型,可以让对象数组独立检索
一个例子说明nested类型的作用
(1)Nested:嵌套对象是object数据类型的专用版本,能够对 对象数组进行彼此独立地索引和查询。

(2)对象数组默认组织形式

内部对象字段数组的实际存储机制与我们想的不一样。Lucene没有内部对象的概念,因为ElasticSearch将对象层次结构扁平化为一个字段名和字段值的列表。例如下面文档。

PUT user/_doc/1
{
  "group" : "man",
  "userName" : [ 
    {
      "first" : "张",
      "last" :  "三"
    },
    {
      "first" : "李",
      "last" :  "四"
    }
  ]
}

这里想要查询first为“张”,last为“四”的数据,按照我们的理解应该没有这种数据。按如下语句查询。

GET /user/_search
{
 "query":{
    "bool":{
    "must":[
      {
        "match":{
          "userName.first":"张"
        }
      },
      {
        "match":{
          "userName.last":"四"
        }
      }
    ]
   }
 }
}

查询结果如下:居然查询到了。这显然不符合我们的预期。
在这里插入图片描述
这个原因就是前面所说的lucene没有内部对象的概念,所谓的内部对象实际是被扁平化为一个简单的字段名称和值列表。文档内部存储是这个样子的:

{
  "group" :        "human",
  "sex" :          "man",
  "userName.first" : [ "张", "李" ],
  "userName.last" :  [ "三", "四" ]
}

显然 userName.first 和 userName.last 字段平面化为多值字段,之前的关联性丢失,查询就不会得到预期的结果。

那么要如何实现自己想要的语义呢? —— 显然就是本文想要说的nested了。

// 第一步先声明类型
PUT order
{
  "mappings": {
    "properties": {
      "goods_list": {
        "type": "nested",
        "properties": {
          "name": {
            "type": "text"
          }
        }
      }
    }
  }
}
// 第二步 添加数据
PUT /order/_doc/1
{
  "total_price": 126,
  "goods_list": [
    {
      "name": "xiaomi",
      "price": 30
    },
    {
      "name": "guang",
      "price": 19
    },
    {
      "name": "liang",
      "price": 20
    }
  ]
}
// 查询
GET order/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "goods_list",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "goods_list.name": "guang"
                    }
                  },
                  {
                    "match": {
                      "goods_list.price": 20
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

这时是查不出来的,符合预期
在这里插入图片描述
这样就可以查询到了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

el-table 三角形提示

<template><div><el-table :data"tableData" style"width: 100%"><el-table-column prop"ddd" label"日期2" width"150" /><el-table-column prop"ddd" label"日期2" width…

Apifox接口调试工具

1、Apifox简介 Apifox 是集 API 文档、API 调试、API Mock、API 自动化测试多项实用功能为一体的 API 管理平台&#xff0c;定位为 Postman Swagger Mock JMeter。旨在通过一套系统、一份数据&#xff0c;解决多个工具之间的数据同步问题。只需在 Apifox 中定义 API 文档&a…

线性模型算法-完结总结篇

简介 该篇文章就是在CSDN上更新的最终版本。 本文章将介绍&#xff1a;机器学习中的线性模型有关内容&#xff0c;我将尽可能做到 详细地介绍线性模型的所有相关内容,模块如下&#xff0c;希望这些将有助于读者了解这种最初步但却强大的算法&#xff1a; 线性回归逻辑回归 S…

Day22 SSH远程管理服务

sshd服务&#xff0c;系统自带&#xff0c;默认开机自启运行 云/物理服务器的安全组和防火墙默认放行该端口 软件包&#xff1a;openssh-server&#xff08;服务端&#xff09;&#xff1b;openssh-client&#xff08;客户端&#xff09;&#xff1b; 格式&#xff1a;ssh I…

抖音小店没有流量怎么办?这两点做对!别人羡慕你赚的盆满钵满

哈喽~我是电商月月 电商行业&#xff0c;说一句实在的话&#xff0c;每一年都有一批人说电商不好做&#xff0c;但每一年都有人从电商行业赚到钱 做抖音小店没流量出不出单的原因其实很简单&#xff0c;就是思维不同&#xff0c;导致的结果差异 我们做抖店并不是赚一单就满足…

三维点云处理-滤波器

前言&#xff1a; 点云中往往会存在很多噪声&#xff0c;也就是常说的离群点&#xff0c;如下左图中的黑色圈位置&#xff0c;可能会对有效数据的提取分析造成影响&#xff0c;因此在数据分析前通常会考虑采用滤波器&#xff08;Filter&#xff09;等手段进行一些预处理的操作。…

东北大学工程训练CNC加工中心(坤图)

东北大学加工中心&#xff08;CNC&#xff09;采用的系统为FANUC系统。 要求学生自主设计图样&#xff0c;编写GCODE文件&#xff0c;操作电脑使机床按设计路径铣出图案。 本人设计的图样为坤坤图 图为用CAD设计绘制的图样。 计算坐标&#xff0c;设计铣刀轨迹&#xff0c;得…

解析社交电商:从私域流量到移动突破口

亲爱的朋友们&#xff0c;我是微三云的周丽&#xff0c;一名专注于私域电商模式创新的探索者。 随着互联网的迅速发展和科技的不断进步&#xff0c;社交电商作为新型商业模式不断崛起。在这个时代&#xff0c;私域流量、社群电商、社区电商以及移动电商等概念层出不穷&#xf…

成功密码期刊投稿简介

《成功密码》综合版是由国家新闻出版总署批准&#xff0c;江西省教育厅主管的正规期刊&#xff0c;"以培养担当民族复兴大任的时代新人为着眼点&#xff0c;强化教育引导、实践养成、制度保障"&#xff0c;倡导教育研究的学术水准&#xff0c;注重理论与实践的有机结…

Linux消息队列信号量(了解)

消息队列 要实现进程间通信我们必须得让不同的进程看到同一份资源&#xff0c; 根据这个资源的不同&#xff08;文件缓冲区&#xff0c; 内存块&#xff0c; 队列&#xff09; 我们将通信方式分为管道&#xff0c;共享内存&#xff0c;以及我们接下来要讲的消息队列。 消息队…

【学习笔记二十七】EWM存储类型控制

一、EWM存储类型控制概述 Storage control 是用来决定仓库产品移动时所需要的流程步骤。它的目的是用来处理基于仓库物理布局及仓库流程所要求的复杂的上架和下架流程步骤。 仓库里常见的操作步骤有:Picking、Packing、Staging、Loading、Putaway、Unloading、Counting、Quali…

【C语言】联合体详解

目录 1.联合体的声明 2.联合体的特点 3.相同成员的结构体和联合体对比 4.联合体大小的计算 1.联合体的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以不同的类型。但是编译器只为最大的成员分配足够的内存空间。 联合体的特点是所…

操作系统:进程间通信 | System V IPC

目录 前言&#xff1a; 1.共享内存 1.1.什么是共享内存 1.2.共享内存使用接口 shmget函数 shmat函数 shmdt函数 shmctl函数 2.共享内存实现通信 2.1.代码实现 comm.hpp server,cpp client.cpp 2.2.共享内存的缺点 2.3.实现通信的同步化 2.4共享内存通信的优势 3.…

Vitis HLS 学习笔记--HLS入门示例集合-目录

目录 1. 示例集合概述 2. Interface 接口 2.1 Aggregation_Disaggregation 聚合与解聚 2.1.1 aggregation_of_m_axi_ports 2.1.2 aggregation_of_nested_structs 2.1.3 aggregation_of_struct 2.1.4 auto_disaggregation_of_struct 2.1.5 disaggregation_of_axis_port …

游戏工作室为什么要使用海外住宅IP防封?

当谈到游戏工作室时&#xff0c;它们通常以多开游戏账号来获取收益为主要目标。这种商业模式在游戏产业中已经成为一个独特而且颇具潜力的领域。然而&#xff0c;随之而来的是防封问题&#xff0c;特别是当游戏工作室试图通过多开账号来赚取更多收益时。因此&#xff0c;我们有…

Navicat连接SQLSever报错:[08001] MicrosoftTCP Provider 远程主机强迫关闭了一个现有的连接

Navicat连接SQLSever报错&#xff1a;[08001] [Microsoft][SQL Server Native Client 10.0]TCP Provider: 远程主机强迫关闭了一个现有的连接 问题分析 旧版的MSSQL 如果不是最新版的&#xff0c;可以去这安装以下即可。 最新版的MSSQL 如果是安装最新版的MSSQL连接不上很正…

Kubernetes 的未来:通过生成式 AI 实现的潜在改进

Kubernetes 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台&#xff0c;它彻底改变了 IT 行业。然而&#xff0c;与所有创新技术一样&#xff0c;它不断寻求改进以提高效率、可用性和功能。生成式人工智能&#xff08;Generative AI&#xff09;是一个有望取得改进…

C++:匿名对象

在C中&#xff0c;匿名对象是指在不分配给定变量名称的情况下创建的临时对象。这些对象通常用于传递参数给函数、作为函数的返回值或者在表达式中使用。 创建匿名对象 在C中&#xff0c;您可以使用类的构造函数来创建匿名对象。例如&#xff1a; MyClass(); // 创建一个匿名…

终于有人把“Linux云计算路线”整理出来了,收藏起来,随时查看

一&#xff0c;计算机硬件 二&#xff0c;计算机网络 三&#xff0c;Linux系统管理 四&#xff0c;构建Linux服务系统&#xff0c;数据库&#xff0c;程序及Web服务 五&#xff0c;消息队列&#xff0c;web集群&#xff0c;系统及软件优化&#xff0c;智能化监控&#xff0c;海…

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色。 先看效果图&#xff1a; 在CSS中&#xff0c;你可以使用border属性或者background属性来画一条虚线。以下是两种常见的方法&#xff1a; 方法一&#xff1a;使用border属性 你可以设置一个元素的border…