对多个indices进行操作

es中大多resetapi支持请求多个index, 例如”test1,test2,test3”,index也可以使用通配符, 例如”test*“, 还可以使用+,-来包含或移除某个或某类index, 例如”test*,-test1”
支持设置多个的api的请求字符串可设置以下参数:

  • ignore_unavailable: 是否忽略单个index是否可用(不存在或关闭), true表示忽略, false表示不忽略, 默认为false, 例如查询已经关闭的index:

输入: GET /test1/user,account/_search?ignore_unavailable=false
输出:

1
2
3
4
{
"error": "IndexClosedException[[test1] closed]",
"status": 403
}

输入: GET /test1/user,account/_search?ignore_unavailable=false
输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": 0,
"hits": []
}
}
  • allow_no_indices: 是否忽略通配符匹配不到index(不存在或关闭)的情况, true表示允许, false表示不允许,默认为true, 例如查询已经关闭的index:

输入: GET /test*/_search?allow_no_indices=false
输出:

1
2
3
4
{
"error": "IndexMissingException[[test*] missing]",
"status": 404
}

输入: GET /test*/_search?allow_no_indices=true

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": 0,
"hits": []
}
}
  • expand_wildcards: 设置是否扩展通配符到closed的index中,open表示只在匹配并为open的index中查询,closed表示在匹配的所有的index中查询, 默认为closed, 例如查询已经关闭的index
    输入: GEt /test*/_search?expand_wildcards=closed
    输出:

    1
    2
    3
    4
    {
    "error": "IndexClosedException[[test1] closed]",
    "status": 403
    }

公共参数

  • format: 表示返回数据的格式, 可选值为yaml和json两种, 例如:
    输入: GET /test1/user/_search?format=yaml
    输出:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ---
    took: 23
    timed_out: false
    _shards:
    total: 5
    successful: 5
    failed: 0
    hits:
    total: 1
    max_score: 1.0
    hits:
    - _index: "test1"
    _type: "user"
    _id: "1"
    _score: 1.0
    _source:
    name: "silence"
  • pretty: 表示在已json格式返回数据时是否以可视化的格式返回, false或未在设置表示不格式化, 否则格式化

  • human: 表示是否对返回结果进行格式化处理,比如3600(s)显示1h

  • 查询结果过滤
    主要使用filter_path参数进行设置

1.在返回结果中我们只关注took, hits.total, hits.hits._id, hits._source, 则我们可以发起如此请求:
输入:GET /test1/user/_search?filter_path=took,hits.total,hits.hits._id,hits.hits._source
输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"took": 1,
"hits": {
"total": 1,
"hits": [
{
"_id": "1",
"_source": {
"name": "silence"
}
}
]
}
}

2.也可以使用统配符进行设置
输入: GET /_nodes/stats?filter_path=nodes.*.*ost*,nodes.*.os.*u
输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"nodes": {
"9jfW4VeWRta-Uq7Cq7bK34": {
"host": "silence",
"os": {
"cpu": {
"sys": 1,
"user": 1,
"idle": 96,
"usage": 2,
"stolen": 0
}
}
}
}
}

3.若层级较多时可使用**进行简化
输入: GET /_nodes/stats?filter_path=nodes.**.*sys*
输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"nodes": {
"9jfW4VeWRta-Uq7Cq7bK34": {
"os": {
"cpu": {
"sys": 2
}
},
"process": {
"cpu": {
"sys_in_millis": 139106
}
}
}
}
}

4.若只需要_source中的某些值,则可以将filter_path和_source参数共同使用
输入: GET /test1/account/_search?filter_path=hits.hits._source&_source=firstname,lastname,gender&size=2
输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"hits": {
"hits": [
{
"_source": {
"firstname": "Rodriquez",
"gender": "F",
"lastname": "Flores"
}
},
{
"_source": {
"firstname": "Opal",
"gender": "M",
"lastname": "Meadows"
}
}
]
}
}

5.flat_settings用于设置在查询setting时,setting中的key格式, 默认为false:
输入: GET /test1/_settings?flat_settings=true
输出:

1
2
3
4
5
6
7
8
9
10
11
{
"test1": {
"settings": {
"index.creation_date": "1442230557598",
"index.uuid": "70bg061IRdKUdDNvgkUBoQ",
"index.version.created": "1060099",
"index.number_of_replicas": "1",
"index.number_of_shards": "5"
}
}
}

输入: GET /test1/_settings?flat_settings=false
输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"test1": {
"settings": {
"index": {
"creation_date": "1442230557598",
"number_of_shards": "5",
"uuid": "70bg061IRdKUdDNvgkUBoQ",
"version": {
"created": "1060099"
},
"number_of_replicas": "1"
}
}
}
}
  • 请求参数格式
    1.boolean: 在es中将”0”, 0, false, “false”, “off”识别为false,其他均按ture处理
    2.number
    3.time: 可以提交一个以毫秒时间的整数或者以日期标识结尾的字符串,例如”2d”表示2天,支持的格式有: y(year),M(month),w(week),d(day),h(hour),m(minute),s(second)
    4.距离: 可以提交一个以米为单位的证书或者以距离表示结尾的字符串,例如”2km”表示2千米,支持的格式有: mi/miles(mile英里), yd/yards(yard码), ft/feet(feet尺), in/inch(inch英寸), km/kilometers(kilometer千米), m/meters(meter米), cm/centimeters(centimeter厘米), mm/millimeters(millimeter毫米), NM/nmi/nauticalmiles(Nautical mile纳米)
    5.模糊类型:
    a.数字,时间, IP:类似于range -fuzzines<=value<=+fuzzines
    b.字符串: 计算编辑距离

  • 返回结果中key的格式为驼峰还是下划线分割, 通过case设置为camelCase则返回驼峰格式,否则为下划线分割形式

  • jsonp: 可以用jsonp回调的方式调用es api, 需要通过callback设置回调函数名称,并且需要在elasticsearch.yml中配置http.jsonp.enable: true来启用jsonp格式

url访问控制

可以通过代理方式进行es的url访问控制,但是对于multi-search,multi-get和bulk等在请求参数中设置不同的index的情况很难解决.
为防止通过请求体设置index的情况,需要在elasticsearch.yml中设置rest.action.multi.allow_explicit_index:false, 此时es不允许在request body中设置index

如在修改前:
输入:

1
2
3
4
5
POST /test1/user3/_bulk?pretty
{"index" : {"_index" : "test2", "_type" : "user1", "_id" : 1}}
{"name" : "silence1"}
{"index" : {"_index" : "test2", "_type" : "user1", "_id" : 2}}
{"name" : "silence2"}

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"took": 225,
"errors": false,
"items": [
{
"index": {
"_index": "test2",
"_type": "user1",
"_id": "1",
"_version": 1,
"status": 201
}
},
{
"index": {
"_index": "test2",
"_type": "user1",
"_id": "2",
"_version": 1,
"status": 201
}
}
]
}

如在修改后(已重启):
输出:

1
2
3
4
{
"error": "IllegalArgumentException[explicit index in bulk is not allowed]",
"status": 500
}

输入:

1
2
3
4
5
POST /test1/user3/_bulk?pretty
{"index" : {"_id" : 1}}
{"name" : "silence1"}
{"index" : {"_id" : 2}}
{"name" : "silence2"}

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"took": 8,
"errors": false,
"items": [
{
"index": {
"_index": "test1",
"_type": "user3",
"_id": "1",
"_version": 1,
"status": 201
}
},
{
"index": {
"_index": "test1",
"_type": "user3",
"_id": "2",
"_version": 1,
"status": 201
}
}
]
}

elasticsearch 第四篇(API约定)的更多相关文章

  1. Spring Cloud第十四篇 | Api网关Zuul

    ​ 本文是Spring Cloud专栏的第十四篇文章,了解前十三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring C ...

  2. Elasticsearch第四篇:索引别名、添加或修改映射规则

    项目中经常出现的问题,例如添加字段.修改字段,那原先的索引规则就要跟着改变,最好是一开始就给索引一个别名,修改字段时新增映射,然后将笔名指向新的映射,当然需要将之前的索引搬迁到新的映射当中. 1.获取 ...

  3. ElasticSearch查询 第一篇:搜索API

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  4. ElasticSearch查询 第四篇:匹配查询(Match)

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  5. ElasticSearch入门 第四篇:使用C#添加和更新文档

    这是ElasticSearch 2.4 版本系列的第四篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  6. ElasticSearch入门 第二篇:集群配置

    这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  7. ElasticSearch入门 第一篇:Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  8. ElasticSearch查询 第二篇:文档更新

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  9. 第四篇 SQL Server代理配置数据库邮件

    本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...

随机推荐

  1. HBase第一章 安装 HMaster 主备

    1.集群环境 Hadoop HA 集群规划 hadoop1 cluster1 nameNode  HMaster hadoop2 cluster1 nameNodeStandby ZooKeeper ...

  2. Windows Powershell统计代码行数

    dir .\ -Recurse *.py | Get-Content | Measure-Object

  3. Vue.js之常用指令

    vue常用指令 vue.js官方给自己的定义是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍vue.js的常用指令. 官网:点我 一.v-text.v-html v-text:用于绑定文本 v ...

  4. Phaser Matter Collision Plugin 碰撞插件 -- iFiero技术分享

    collision-simple-demo Phaser 自带的Arcade虽然易用,但复杂的物理碰撞明显就不够用了,于是Matter等物理引擎还是不得不学的,以下是Matter物理体碰撞的一个插件, ...

  5. Python数据结构 将列表作为栈和队列使用

    列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop()  ...

  6. Eclipse用java.util.Scanner时出现Resource leak: 'in' is never closed

    Resource leak: 'in' is never closed : 直译为资源泄漏,‘in’一直没被关闭. 由于声明了数据输入扫描仪(Scanner in),从而获得了配置内存,但是结束时却没 ...

  7. 【sed】常用命令

    替换 替换某一整行 sed '1c hello' test #将第一行替换为hello str1替换为str2 sed 's/^str1.*/str2/' filename #以str1开头 sed ...

  8. Amazon及其亏本诱饵策略还能坚持多久?

    Amazon 刚刚公布了最新的财报,亏损 4100 万美元.这是这家电子商务巨头连续 5 个季度以来的第 3 次亏损.但是华尔街似乎却一片叫好声,当日 Amazon 的股价也涨了近 8 个点达 359 ...

  9. Python20-Day01

    简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释 编译型语言是一种以编译器来实现的编程语言,优缺点:执行速度快,调试麻烦 编译型语言:Java,Go,C,C++ 解释性 ...

  10. java-HttpGetPost-图片字节流上传

    在java程序开发中经常用到与服务端的交互工作,主要的就是传递相应的参数请求从而获取到对应的结果加以处理 可以使用Get请求与Post请求,注意!这里的Get请求不是通过浏览器界面而是在程序代码中设置 ...