我们可以点击Elasticsearch API以获取所需的响应,但是如果要修改API响应,以便我们更改显示格式或过滤掉某些字段,然后我们可以将这些选项与查询一起应用。 有一些常见的选项可以适用于API,在下面我们来介绍一些常用的选项。

准备数据

我们首先使用Bulk API来把我们的文档导入到Elasticsearch中:

POST _bulk
{ "index" : { "_index" : "twitter", "_id": 1} }
{"user":"张三","message":"今儿天气不错啊,出去转转去","uid":2,"city":"北京","province":"北京","country":"中国","address":"中国北京市海淀区","location":{"lat":"39.970718","lon":"116.325747"}, "DOB":"1980-12-01"}
{ "index" : { "_index" : "twitter", "_id": 2 }}
{"user":"老刘","message":"出发,下一站云南!","uid":3,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区台基厂三条3号","location":{"lat":"39.904313","lon":"116.412754"}, "DOB":"1981-12-01"}
{ "index" : { "_index" : "twitter", "_id": 3} }
{"user":"李四","message":"happy birthday!","uid":4,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区","location":{"lat":"39.893801","lon":"116.408986"}, "DOB":"1982-12-01"}
{ "index" : { "_index" : "twitter", "_id": 4} }
{"user":"老贾","message":"123,gogogo","uid":5,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区建国门","location":{"lat":"39.718256","lon":"116.367910"}, "DOB":"1983-12-01"}
{ "index" : { "_index" : "twitter", "_id": 5} }
{"user":"老王","message":"Happy BirthDay My Friend!","uid":6,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区国贸","location":{"lat":"39.918256","lon":"116.467910"}, "DOB":"1984-12-01"}
{ "index" : { "_index" : "twitter", "_id": 6} }
{"user":"老吴","message":"好友来了都今天我生日,好友来了,什么 birthday happy 就成!","uid":7,"city":"上海","province":"上海","country":"中国","address":"中国上海市闵行区","location":{"lat":"31.175927","lon":"121.383328"}, "DOB":"1985-12-01"}

这样我们就有6个文档了。

Pretty=true

我们在我们的请求里加入?pretty=true可以使用这个选项使我们的显示格式更加漂亮。当我们调试我们的接口时,这个是推荐的用法。比如:

GET twitter/_doc/1?pretty=true

显示结果:

{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 6,
"_primary_term" : 5,
"found" : true,
"_source" : {
"user" : "张三",
"message" : "今儿天气不错啊,出去转转去",
"uid" : 2,
"city" : "北京",
"province" : "北京",
"country" : "中国",
"address" : "中国北京市海淀区",
"location" : {
"lat" : "39.970718",
"lon" : "116.325747"
},
"DOB" : "1980-12-01"
}
}

在一般的情况下,在Kibana的Dev tools中,显示就是这样的结果。

format

在默认的情况先返回的结果都是以JSON格式的。对于有些情况来说,我们可能需要的结果是yml格式的,那么我们可以使用format-yaml格式来返回yaml格式的结果:

GET twitter/_doc/1?format=yaml

返回结果:

---
_index: "twitter"
_type: "_doc"
_id: "1"
_version: 2
_seq_no: 6
_primary_term: 5
found: true
_source:
user: "张三"
message: "今儿天气不错啊,出去转转去"
uid: 2
city: "北京"
province: "北京"
country: "中国"
address: "中国北京市海淀区"
location:
lat: "39.970718"
lon: "116.325747"
DOB: "1980-12-01"

显然这个是yaml格式的结果。

human

有一些人类可读的值将以某种方式返回结果让我们更容易理解。 例如,3,600,000毫秒令人困惑,但是1个小时是清楚的。 设置human=true可将结果转换为更易读的响应。假如我们想得到当前索引的配置:

GET twitter/_settings

那么显示的结果是:

{
"twitter" : {
"settings" : {
"index" : {
"creation_date" : "1577087951094",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "y3PqEnjBRnKPFHDPTrirkA",
"version" : {
"created" : "7050099"
},
"provided_name" : "twitter"
}
}
}
}

显然这里的create_date和created版本信息都是我们没法理解的。在这个时候如果我们加上human=true再来看看显示的结果:

GET twitter/_settings?human=true

这次显示的结果是:

{
"twitter" : {
"settings" : {
"index" : {
"creation_date_string" : "2019-12-23T07:59:11.094Z",
"number_of_shards" : "1",
"provided_name" : "twitter",
"creation_date" : "1577087951094",
"number_of_replicas" : "1",
"uuid" : "y3PqEnjBRnKPFHDPTrirkA",
"version" : {
"created_string" : "7.5.0",
"created" : "7050099"
}
}
}
}
}

这一次,我们可以清楚地看到creation_date_string及created_string的值了。

filter_path

在查询中使用filter_path参数,我们可以减少来自Elasticsearch。 它支持过滤器列表或通配符以匹配字段名称或部分字段名称。

首先,我们来做一个正常的查询:

GET twitter/_search

返回的结果是:

{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 6,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"user" : "张三",
"message" : "今儿天气不错啊,出去转转去",
"uid" : 2,
"city" : "北京",
"province" : "北京",
"country" : "中国",
"address" : "中国北京市海淀区",
"location" : {
"lat" : "39.970718",
"lon" : "116.325747"
},
"DOB" : "1980-12-01"
}
},
...
]
...

假如我们只想返回我们想要的一些字段,那么怎么办?我们可以通过配置filter_path来进行选择,比如:

GET twitter/_search?filter_path=hits.hits._source.user, hits.hits._source.country

在上面,我们通过filter_path来选择想要的user及country字段。返回的结果是:

{
"hits" : {
"hits" : [
{
"_source" : {
"user" : "张三",
"country" : "中国"
}
},
{
"_source" : {
"user" : "老刘",
"country" : "中国"
}
},
{
"_source" : {
"user" : "李四",
"country" : "中国"
}
},
{
"_source" : {
"user" : "老贾",
"country" : "中国"
}
},
{
"_source" : {
"user" : "老王",
"country" : "中国"
}
},
{
"_source" : {
"user" : "老吴",
"country" : "中国"
}
}
]
}
}

flat_settings

将flat_settings过滤器设置为true将以flat格式返回结果。 如果设置为假,它将以更易理解的格式返回结果,比如,正常情况下:

GET twitter/_settings

返回的结果是:

{
"twitter" : {
"settings" : {
"index" : {
"creation_date" : "1577862721663",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "4IwiEL23Roa8DIs2chxVTQ",
"version" : {
"created" : "7050099"
},
"provided_name" : "twitter"
}
}
}
}

如果我们设置flat_settings=true,那么:

GET twitter/_settings?flat_settings=true

返回的结果是:

{
"twitter" : {
"settings" : {
"index.creation_date" : "1577862721663",
"index.number_of_replicas" : "1",
"index.number_of_shards" : "1",
"index.provided_name" : "twitter",
"index.uuid" : "4IwiEL23Roa8DIs2chxVTQ",
"index.version.created" : "7050099"
}
}
}

————————————————

版权声明:本文为CSDN博主「Elastic 中国社区官方博客」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/UbuntuTouch/article/details/103792780

Elasticsearch API响应的一些常用选项的更多相关文章

  1. curl常用选项详解

    curl常用选项详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 又是下班的时间了,让我们一起来学习一下今天的Linux命令吧~我一半只把自己常用的参数列出来,其他的有但是我们几 ...

  2. API响应

    保证API响应的正确性,就是你需要做的大部分工作.postman的response viewer部分会协助你完成该工作且使其变得简单. 一个API的响应包含body,headers,响应状态码.pos ...

  3. Hotspot JVM的常用选项

    Hotspot JVM的常用选项 选项的分类 Hotspot JVM提供以下三大类选项: 1. 标准选项:这类选项的功能是很稳定的,在后续版本中也不太会发生变化.运行java或者java -help可 ...

  4. Python Elasticsearch api,组合过滤器,term过滤器,正则查询 ,match查询,获取最近一小时的数据

    Python Elasticsearch api   描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下 ...

  5. zip命令的常用选项

    zip命令的常用选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家都知道,在linux上一切皆文件,在实际生产环境中,如果我们需要部署一些系统的服务,我们会将一些软件包提前下 ...

  6. FPGA综合工具--Synplify Pro的常用选项及命令

    最近要用到Synplify,但以前没使用过,无基础,找到一篇帖子,隧保存下来. 本文转自:http://blog.sina.com.cn/s/blog_65fe490d0100v8ax.html Sy ...

  7. MySQL Backup mysqldump 常用选项与主要用法

    The mysqldump client utility performs logical backups, producing a set of SQL statements that can be ...

  8. SAS PROC PRINT 常用选项和语句说明

    常用选项1.使用选项OBS=修改观测序号标签2.使用NOOBS选项不显示观测序号列3.使用ID语句在输出中取代观测序号列4.使用VAR选择输出的变量5.使用WHERE语句选择输出的观测6.使用数据集选 ...

  9. mysqldump命令之常用选项

    ===============================================mysqldump常用选项-h, --host=name:服务器IP-u, --user=name:登录名 ...

随机推荐

  1. 准备java编程软件与第一个java程序

    我们要用的java的编程软件叫做:eclipse windows上安装eclipse 首先需要一个浏览器 要下载eclipse最简单的方式就是在官网下载  官网:https://www.eclipse ...

  2. Etcd 使用场景:通过分布式锁思路实现自动选主

    分布式锁?选主? 分布式锁可以保证当有多台实例同时竞争一把锁时,只有一个人会成功,其他的都是失败.诸如共享资源修改.幂等.频控等场景都可以通过分布式锁来实现. 还有一种场景,也可以通过分布式锁来实现, ...

  3. while and do while

    package study5ran2yl.study; public class deno14 { public static void main(String[] args) { //计算1+2+. ...

  4. 使用vs2022编译assimp,并基于OpenGL加载模型

    Assimp :全称为Open Asset Import Library,这是一个模型加载库,可以导入几十种不同格式的模型文件(同样也可以导出部分模型格式).只要Assimp加载完了模型文件,我们就可 ...

  5. 题解 P1999【覆盖墙壁】

    数学题 令 \(A_n\) 为 \(2\times n\) 的墙壁放满块的方案数,考虑递推. 显然 \(A_0=1\),我们令对于 \(k<0\),\(A_k=0\) . 放直线型的块非常好递推 ...

  6. docker for windows无法共享硬盘

    最近在一次win10安装docker的过程中无法共享D盘.每次一点击共享就出现如下 经过网上搜索后,有反馈是防火墙的问题,结果关掉防火墙还是无法改善,查找日志 因为无法判断是什么server服务,故又 ...

  7. 并发刺客(False Sharing)——并发程序的隐藏杀手

    并发刺客(False Sharing)--并发程序的隐藏杀手 前言 前段时间在各种社交平台"雪糕刺客"这个词比较火,简单的来说就是雪糕的价格非常高!其实在并发程序当中也有一个刺客, ...

  8. typora的第一天

    一级标题 二级标题 三级标题 ..... 表格 java spring mybatis 代码 java代码 public void Hello(){ } 字体 hello word! hello wo ...

  9. Linxu用户名验证登录MySQL管理数据库

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 前情介绍: 我们都知道登录MySQL数据库时,连接层接入数据库需要经过mysql.user表中,用户名密码的验证才能登录数 ...

  10. linux 磁盘io利用率高,分析的正确姿势

    一.背景简介 作为一个DBA难免不了会遇到性能问题,那么我们遇到性能问题该如何进行排查呢?例如我们在高并发的业务下,出现业务响应慢,处理时间长我们又该如何入手进行排查,本片文章将分析io高的情况下如何 ...