当前位置: 首页 > news >正文

Elaticsearch REST API常用技巧

在Elasticsearch的REST API中,有很多使用技巧,这里针对官方文档给出的介绍,总结了几个常用的例子。

更多内容参考:Elastisearch文档总结

多索引

ES支持在一次请求中指定多个索引,可以使用通配符或者日期表达式的方式:

例如,foo*索引会匹配foo1,foo2,foo3等索引。_all则会匹配所有的索引。

同时也可以针对不可用的索引进行限制。

 

日期表达式支持如下的格式:

<static_name{date_math_expr{date_format|time_zone}}>

static_name是索引的静态部分

date_math_expr是日期表达式

后面跟着date_format是日期的格式;time_zone为时区

举个例子,如果想要查询logstash前两天的日期,可以写成:

curl -XGET 'localhost:9200/<logstash-{now/d-2d}>/_search' {
  "query" : {
    ...
  }
}

再比如,当前的时间是2014年3月22日,那么:

<logstash-{now/d}> 会匹配 logstash-2024.03.22
<logstash-{now/M}> 会匹配 logstash-2024.03.01
<logstash-{now/M{YYYY.MM}}> 会匹配 logstash-2024.03
<logstash-{now/M-1M{YYYY.MM}}> 会匹配 logstash-2024.02
<logstash-{now/d{YYYY.MM.dd|+12:00}} 会匹配 logstash-2024.03.23

过去三天的索引可以表示为:

curl -XGET 'localhost:9200/<logstash-{now/d-2d}>,<logstash-{now/d-1d}>,<logstash-{now/d}>/_search' {
  "query" : {
    ...
  }
}

过滤

所有的API都可以接受一个参数,filter_path,这个参数指定了过滤后的字段,返回的结果只会显示过滤指定的内容:

curl -XGET 'localhost:9200/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score'
{
  "took" : 3,
  "hits" : {
    "hits" : [
      {
        "_id" : "3640",
        "_score" : 1.0
      },
      {
        "_id" : "3642",
        "_score" : 1.0
      }
    ]
  }
}

支持使用通配符,进行匹配

curl -XGET 'localhost:9200/_nodes/stats?filter_path=nodes.*.ho*'
{
  "nodes" : {
    "lvJHed8uQQu4brS-SXKsNA" : {
      "host" : "portable"
    }
  }
}

如果使用了两个**则会匹配所有的内容

curl 'localhost:9200/_segments?pretty&filter_path=indices.**.version'
{
  "indices" : {
    "movies" : {
      "shards" : {
        "0" : [ {
          "segments" : {
            "_0" : {
              "version" : "5.2.0"
            }
          }
        } ],
        "2" : [ {
          "segments" : {
            "_0" : {
              "version" : "5.2.0"
            }
          }
        } ]
      }
    },
    "books" : {
      "shards" : {
        "0" : [ {
          "segments" : {
            "_0" : {
              "version" : "5.2.0"
            }
          }
        } ]
      }
    }
  }
}

如果要过滤_source,那么需要重新指定_source中的字段:

curl -XGET 'localhost:9200/_search?pretty&filter_path=hits.hits._source&_source=title'
{
  "hits" : {
    "hits" : [ {
      "_source":{"title":"Book #2"}
    }, {
      "_source":{"title":"Book #1"}
    }, {
      "_source":{"title":"Book #3"}
    } ]
  }
}

结果内容扁平化

使用flat_settings参数,它只会影响到返回的内容显示,例如设置为true后返回的内容是下面这种:

{
  "persistent" : { },
  "transient" : {
    "discovery.zen.minimum_master_nodes" : "1"
  }
}

而设置为false,则为:

{
  "persistent" : { },
  "transient" : {
    "discovery" : {
      "zen" : {
        "minimum_master_nodes" : "1"
      }
    }
  }
}

返回内容格式化

正常返回的数据,可能是混杂在一行的,人的肉眼很难分别其中的信息,这时,可以再请求的末尾添加?pretty=true,或者?format-yaml设置成可读的形式。

pretty是以JSON的形式返回结果。直接写?pretty与?pretty=true作用一样

yaml则是使用横向缩进的方式展现结果。

返回结果可读

返回的结果设置为可读,对于我们肉眼去观察结果也很重要,比如:

"exists_time": "1h"
"size": "1kb"

要比

"exists_time_in_millis": 3600000
"size_in_bytes": 1024

容易理解的多

参考

【1】YAML格式

【2】ElastICsearch APIs

相关文章:

  • eclipse控制台乱码的解决方法
  • QT信号槽机制
  • Nginx 配置详解
  • Monitor traffic to localhost from IE or .NET
  • scala可变长度参数(二)
  • js中replace用法
  • 【转载】强大的命令行工具wmic
  • kendo grid应用经验总结
  • SurfaceView和View区别
  • sql语句之一维二维
  • hdu 游乐场
  • dubbo+sping+zookeeper入门教程
  • struts国际化
  • Tornado学习笔记(1)
  • Linux环境下段错误的产生原因及调试方法小结
  • 【翻译】babel对TC39装饰器草案的实现
  • JS字符串转数字方法总结
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • windows-nginx-https-本地配置
  • 编写符合Python风格的对象
  • ------- 计算机网络基础
  • 老板让我十分钟上手nx-admin
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • Hibernate主键生成策略及选择
  • ​iOS安全加固方法及实现
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • !!Dom4j 学习笔记
  • #android不同版本废弃api,新api。
  • (11)MSP430F5529 定时器B
  • (2020)Java后端开发----(面试题和笔试题)
  • (备忘)Java Map 遍历
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (定时器/计数器)中断系统(详解与使用)
  • (论文阅读30/100)Convolutional Pose Machines
  • (算法二)滑动窗口
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)setTimeout 和 setInterval 的区别
  • (转)一些感悟
  • .naturalWidth 和naturalHeight属性,
  • .net CHARTING图表控件下载地址
  • .NET/C# 的字符串暂存池
  • .NET大文件上传知识整理
  • .NET的数据绑定
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • []我的函数库
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [CSS]浮动
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [docker] Docker的私有仓库部署——Harbor
  • [English]英语积累本