对多个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. php使用mysql之sql注入(功)

    sql注入就是用户通过构造sql语句,完成sql一系列操作 准备素材如下: 这是test.html <!DOCTYPE html> <html> <meta charse ...

  2. oracle数据库应用性能优化经验(培训讲义)

    这是我给公司同事做的内部培训ppt的讲义,给大家分享一下.这是培训大纲,ppt在找地方上传,等找到了会把链接发在这里 . 暂时放在csdn上,赚点下载积分:https://download.csdn. ...

  3. Linux 安装Zookeeper<准备>(使用Mac远程访问)

    阅读本文需要安装JDK 一 Zookeeper简介 zookeeper是用java语言编写的一款为分布式应用所设计的协调服务 zookeeper是apacahe hadoop的子项目 使用zookee ...

  4. 用EC5/EC6自定义class的区别及用法 -- Phaser3网页游戏框架

      custom class EC6 自定义class class Brain extends Phaser.GameObjects.Sprite { constructor (scene, x, y ...

  5. Paper Reading - Show and Tell: A Neural Image Caption Generator ( CVPR 2015 )

    Link of the Paper: https://arxiv.org/abs/1411.4555 Main Points: A generative model ( NIC, GoogLeNet ...

  6. cs231n学习笔记(一)计算机视觉及其发展史

    在网易云课堂上学习计算机视觉经典课程cs231n,觉得有必要做个笔记,因为自己的记性比较差,留待以后查看. 每一堂课都对应一个学习笔记,下面就开始第一堂课. 这堂课主要是回顾了计算机视觉的起源及其后来 ...

  7. ES6的新特性(3)——变量的解构赋值

    变量的解构赋值 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; le ...

  8. Scrum立会报告+燃尽图 04

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2194 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达,祁玉 ...

  9. Beta阶段第一次网络会议

    Beta阶段第一次网络会议 游戏问题 游戏细节特征不够明显,大小虽然随着电脑分辨率的不同变化着,但是存在清楚的问题 游戏中的提示信息不够,玩家无法快速了解游戏 游戏中背景声音过于单一 游戏AI太简单 ...

  10. jquery新版本旧版本之间的坑

    JQuery自1.6.1版本开始增加一些属性,使用时尽量使用这些新的属性,例如:selected.checked.在高版本中赋值时最好用prop,如果用attr就会出现赋值不成功的问题, 一般自定义属 ...