es 笔记二之基础查询

这篇具有很好参考价值的文章主要介绍了es 笔记二之基础查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文首发于公众号: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" : "amberduke@pyrami.com",
          "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
      }
    }
  }
}

如果想获取更多后端相关文章,可扫码关注阅读:
es 笔记二之基础查询文章来源地址https://www.toymoban.com/news/detail-450766.html

到了这里,关于es 笔记二之基础查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.cnblogs.com/hunterxiong/p/17416359.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django笔记二十二之多数据库操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十二之多数据库操作 这一篇笔记介绍一下多数据库操作。 在第十篇笔记的时候,简单介绍过 using() 的使用方法,多个数据库就是通过 using(db_alias) 的方式来来指定选中的数据库,这里介绍一下同步库表结构时候的操作。 定

    2023年04月11日
    浏览(12)
  • Python语言,ES(Elasticsearch)基础查询

    https://blog.csdn.net/y472360651/article/details/76652021 https://www.cnblogs.com/bainianminguo/articles/12763099.html

    2024年02月11日
    浏览(15)
  • Django笔记四十二之model使用validator验证器

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十二之model使用validator验证器 这一篇笔记介绍一下 model 里的 validator 验证器。 首先,这是个什么东西呢? 在 model 的第四篇笔记里,我们介绍了字段的一些属性,比如是否允许为空,varchar 类型的字段的最大长度等。 一般在

    2024年02月05日
    浏览(14)
  • celery笔记二之建立celery项目、配置及几种加载方式

    本文首发于公众号:Hunter后端 原文链接:celery笔记二之建立celery项目、配置及几种加载方式 接下来我们创建一个 celery 项目,文件夹及目录如下: 接下来我们逐个文件向里面添加内容。 我们建立了一个名为 proj 的文件夹作为我们的项目文件夹,其下有两个文件,celery.py 和

    2024年02月07日
    浏览(14)
  • es笔记五之term-level的查询操作

    本文首发于公众号:Hunter后端 原文链接:es笔记五之term-level的查询操作 官方文档上写的是 term-level queries,表义为基于准确值的对文档的查询,可以理解为对 keyword 类型或者 text 类型分词为 keyword 的字段进行 term 形式的精确查找。 以下是本篇笔记目录: 是否存在值 前缀搜索

    2024年02月06日
    浏览(15)
  • es查询语法笔记之常使用的增删改查~

    最近测的项目数据流是先缓存到MQ,可通过es查询,以下是es查询语法做的笔记。 首先es中的search主要分为URI Search和 body Search URI Search 查询条件跟在_search?后面, 例如: GET 索引名称/_search?1=1 GET 索引名称 就像是select * from emp 注意这个索引名称可以是一个,也可以是多个 如 /

    2024年02月09日
    浏览(15)
  • 【ElasticSearch-基础篇】ES高级查询Query DSL术语级别查询并结合springboot使用

    Elasticsearch 提供了基于 JSON 的完整 Query DSL(Domain Specific Language)来定义查询。 因Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,所以我们在使用springboot的时候也可以很方便的进行集成,本文主要讲述的就是使用springboot实现各类DSL的语法查询。 Elastics

    2024年02月01日
    浏览(9)
  • DeepSpeed-Chat 打造类ChatGPT全流程 笔记二之监督指令微调

    DeepSpeed-Chat 打造类ChatGPT全流程 笔记一 【DeepSpeed 教程翻译】三,在 DeepSpeed中使用 PyTorch Profiler和Flops Profiler DeepSpeed结合Megatron-LM训练GPT2模型笔记(上) 【DeepSpeed 教程翻译】二,Megatron-LM GPT2,Zero 和 ZeRO-Offload 【DeepSpeed 教程翻译】开始,安装细节和CIFAR-10 Tutorial 在 DeepSpeed-C

    2024年02月12日
    浏览(13)
  • 笔记|ElasticSearch|ES 快速批量查询 doc 的 _id 的方法

    已更新整合到新文章:https://dataartist.blog.csdn.net/article/details/130139631 比较慢的查询方法:如果使用如下 body 查询 ES 索引中内容的话,实际上应该会遍历索引中所有字段,如果字段内容很长的话,速度会比较慢: 结果形如: 比较快的查询方法:如果使用如下 body 查询 ES 索引中

    2024年02月12日
    浏览(14)
  • Elasticsearch基础学习-常用查询和基本的JavaAPI操作ES

    Elasticsearch是一个基于 lucene 、分布式、通过Restful方式进行交互的 近实时搜索 平台框架。 ELK技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。 而Elasticsearch 是一个 开源的高扩展的分布式全文搜索引擎 , 是整个 ELK技术栈的核心。 Elasticsearch是一个基于lucene、分

    2024年02月11日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包