首页 > 其他分享 >es 笔记二之基础查询

es 笔记二之基础查询

时间:2023-07-02 19:44:54浏览次数:58  
标签:es GET 笔记 查询 bank 操作 match

本文首发于公众号:Hunter后端
原文链接:es笔记二之基础查询

这一篇笔记介绍 es 的基础查询。

基础查询包括很多,比如排序,类似数据库 limit 的操作,like 操作,与或非等,对于这些操作,我会在介绍他们的用法之后加上对应的数据库 sql 便于理解。

注意: 下面的操作都在 kibana 中实现

以下是本篇文章目录:

  1. 全量查询
  2. 返回数据排序
  3. 限制返回条数
  4. 指定字段搜索
  5. 多条件查询
  6. 大小于过滤

1、全量查询

如果是想要查看 es 中都有哪些 index,可以如下操作:

GET /_cat/indices

然后可以看到在右侧会输出所有的 index,其中就包含我们上一篇笔记导入的 bank 数据,接下来我们使用 bank 作为查询示例。

如果我们想查看 bank 中的全部数据,可以如下操作,但是不指定 size 参数的话默认最多只返回 10 条数据:

GET /bank/_search

出来的结果大致如下:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "account_number" : 1,
          "balance" : 39225,
          "firstname" : "Amber",
          "lastname" : "Duke",
          "age" : 32,
          "gender" : "M",
          "address" : "880 Holmes Lane",
          "employer" : "Pyrami",
          "email" : "[email protected]",
          "city" : "Brogan",
          "state" : "IL"
        }
      },
      ...
    ]
  }
}

took 表示查询花费了多少时间,以毫秒为单位

time_out 表示查询是否超时

_shards 表示分片的查询信息,表示有多少个分片被查询,失败,和跳过

然后查询的结果都被放在 hits 字段下,在 hits 信息中,

hits.total 表示查询到了多少匹配的数据

hits.hits 是一个数组,包含了返回信息的全部内容,每个元素都是单个查询的返回结果。

在每个元素中,_index,_type,_id,_score 表示单条数据的所属的数据库信息

_source 其中包含了获取信息的字段信息,如果没有指定字段,则返回该数据所有字段。

2、返回数据排序

查询出的数据如果想要以某种顺序返回,可以使用 sort 来排序

比如说根据 balance 倒序排序

GET /bank/_search
{
  "sort": [
    {"balance": {"order": "desc"}}
  ]
}

这条数据对应于 sql 中的语法就是:

order by balance desc

sort 后接一个数组,表示可以根据多个字段进行正序,逆序的排序方式。

3、限制返回条数

在前面的搜索中可以看出,如果不限定返回条数,系统会默认返回 10 条数据,在 es 中有类似于 MySQL 的 limit 和 offset 的操作,那就是 size 和 from。

from 表示从第 n 个开始获取数据,从 0 开始取值

size 表示获取数据量的大小。

比如说从第0条数据开始,获取5条数据,可以如下操作:

GET /bank/_search
{
  "sort": [
    {"balance": {"order": "asc"}}
  ],
  "from": 0,
  "size": 5
}

对应于 sql 语法是:

limit 5 offset 0;

4、指定字段搜索

关于字段搜索,有几个关键字,match,match_phrase等。

match 表示模糊搜索,会将搜索的内容先进行分词操作,然后搜索,比如我们搜索 bank 这个 index 中 address 字段中包含 "cove" 或者 包含 "lane" 的的数据,我们可以如下操作:

GET /bank/_search
{
  "query": {
    "match": {"address": "Cove Lane"}
  }
}

这条语句类似于 sql 中的:

where address like "%cove%" or address like "%lane%"

只要 address 的字符包含 cove 或者 lane 之一即可。

而如果我们想要实现 cove lane 作为一个整体进行查询,我们可以使用 match_phrase 来实现:

GET /bank/_search
{
  "query": {
    "match_phrase": {"address": "Cove Lane"}
  }
}

这个操作类似于 sql 中的:

where address like "%mill lane%"

上面这些 match 操作都是大小写不敏感的。

关于 match 和 match_phrase 的筛选方式这里只做一个示例,在后面我会单开一篇笔记详细介绍其用法,针对 text 类型和 keyword 类型的字段。

5、多条件查询

多条件,就是与或非连接操作,类似于 sql 中的 and、or、not,对应在 es 中就是 must,should,must_not

在 es 中,每个连接操作都是一个数组,用于连接多个条件操作,示例如下:

GET /bank/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {"age": 24}},
        {"match": {"age": 25}}
      ],
      "must_not": [
        {"match": {"gender": "M"}}
      ]
    }
  }
}

可以看到,与或非的操作我们是在 query 的 bool 这个 key 的下一级,这个查询对应的 sql 的查询是:

where (age = 24 or age = 25) and gender != "M";

6、大小于过滤

在 es 中,大小于的过滤操作是复杂一点的,也在 bool 这个 key 下一级,用到 filter 和 range 关键字

大小于的关键字和 Django 里的是一样的用到 gt, gte, lt, lte 这几个

比如我们要搜索 age 的范围在 21 到 23 之间的包括 21 和 23 的数据

GET /bank/_search
{
  "query": {
    "bool":{
      "filter": {
        "range": {
          "age": {
            "gte": 21,
            "lte": 22
          }
        }
      }
    }
  }
}

上面的操作可以和与或非的操作进行并列,如果是直接搜索大小于的操作,可以直接如下操作:

GET /bank/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

如果想获取更多后端相关文章,可扫码关注阅读:

image

标签:es,GET,笔记,查询,bank,操作,match
From: https://www.cnblogs.com/hunterxiong/p/17521241.html

相关文章

  • 【学习笔记】Bostan-Mori 算法
    其实是用于常系数齐次线性递推,只不过本篇博文只讲解如何求分式的高次项系数。已知多项式\(f(x),g(x)\),要求:\([x^k]\dfrac{f(x)}{g(x)}\),其中\(f(x),g(x)\)的次数为\(n,m\),\(n,m\le10^5,k\le10^9\)。算法流程如下:分式上下同乘\(g(-x)\),也就是\(g\)的奇次项都取反的多项......
  • 关于 TypeScript 的变量声明和解构赋值(Destructuring Assignment)
    看下面这段代码:const{queryParams,fragment}=this.router.parseUrl(url);const[,path]=url.match(this.URL_SPLIT)??[,''];这段TypeScript代码虽然较短,但仍然展示了许多TypeScript的特性和语法。以下是对这段代码的分析,涵盖了相关的TypeScript特性和语法。......
  • C/C++职员薪资查询系统[2023-07-02]
    C/C++职员薪资查询系统[2023-07-02]数据结构与算法程序设计职员薪资查询系统1项目要求项目名称 职员薪资查询系统 项目类型 应用软件类项目难度 中等 素材资源 无(../res)使用工具 不限 编译系统 Windows、Linux硬件需求 无 程序语言 不限知识点 结构体/类、树、图、链表、......
  • AtCoder Beginner Contest 308 A~F
    AtCoderBeginnerContest308手速有点慢A-NewScheme判断给定数字是否满足条件voidsolve(){ boolok=true; inta[10]; for(inti=1;i<=8;i++) cin>>a[i]; for(inti=1;i<=8;i++) { if(i>=2&&a[i]<a[i-1]) ok=......
  • What are the phases of the maven default lifecycle?
    Thephasesofthedefault(build)mavenSWlifecyclearelistedathttp://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.Ihavelistedthemagainhere:MavenDefaultLifecyclePhasesvalidategenerate-sourcesprocess-sourcesgenerate-reso......
  • HDMI笔记
    关键词:TMDS:最小化传输差分信号(TransitionMinimizedDifferentialSignaling,简称TMDS)是美国SiliconImage公司开发的一项高速传输数据技术,可用于DVI与HDMI的视频传输接口。TMDS差分传输技术是一种利用2个引脚间电压差来传送信号的技术,TMDS具备4个Channel,前3条缆线分是YU(Pb)V(Pr......
  • Codeforces Round 881 Div2 A-F1题解
    codeforcesround881div2题解马上要秋招了,自己本事全丢了,感觉如果这样的话今年就估计要饿死了。先打div3,7月份得开始收心了A.SashaandArrayColoring题意,可以分任意组,每组的贡献是max-min,问最大贡献显然是贪心,从大到小配对一下就行,不想放代码了’B.LongLong给出一......
  • c#学习笔记---------------------事件
    一、事件的原理事件(Event)定义:类 或对象可以通过事件向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发布者”,接收(或处理)事件的类称为“订阅者”。在典型的C#Windows窗体或Web应用程序中,可订阅由按钮和列表框等控件引发的事件。可以使用VisualC#集成开......
  • 二分算法学习笔记与总结
    二分算法学习笔记与总结目录二分二分原理整数二分二分查找原理二分查找模板模板一模板二二分查找用法题目1(模板)(二分查找)题目大意题目分析CODE题目2(运用)(二分查找)题目大意题目分析CODESTL中的二分查找lower_bound()upper_bound()浮点二分浮点数二分模板浮点数二分答案模板题目......
  • ES 中文分词器ik及自定义远程词库
    ik分词器安装部署 下载地址:https://github.com/medcl/elasticsearch-analysis-ik注意es和ik分词器的版本匹配.这里下载7.9.3的ik分词器下载完毕之后去es的工作目录的plugins文件夹下新建ik文件夹,将下载下来的ik压缩包解压缩至ik文件夹下,重启e   词库介绍ik分词器主......