Elasticsearch中的index相当于RDBMS(关系型数据库, 比如MySQL)中的DataBase.

本篇文章通过Kibana插件, 演示了ES的基础语法: 对ES中的index进行CRUD(增删改查)以及关闭、开启操作.

阅读须知:

在ES 6.x之前的版本中, 每个index中可以有多个type, 类似于MySQL中每个数据库可以有多张表, 可在ES 6.0开始, 每个index都只能有1个type.

本篇文章写作较早, 用的是ES 5.6版本, 因此有些操作可能出现不支持等问题, 还请读者查阅解决:-)

1 创建index(配置mapping[映射])

(1) 创建语法:

PUT index
{
"settings": { ... some settings ... },
"mappings": {
// ES 6.x开始不再支持1个index中同时存在多个type
"type1": { ... some mappings ... },
"type2": { ... some mappings ... },
...
}
}

如果不指定settings和mappings, 直接插入数据时, ES会根据要插入数据的类型, 自动创建相关配置 —— 功能强大, 但扩展性不够, 后续若有其他原因需要修改mappings, 会很困难.

—— 所以创建index时, 推荐手动指定settings和mappings的相关配置. 可以参考文章: ES XX - ES的mapping的设置.

(2) 创建示例:

PUT address        // 关于地址(address)的索引
{
"settings": {
"number_of_shards": 1, // 默认分片数为5
"number_of_replicas": 0 // 默认副本数为1
},
"mappings": {
"province": { // type是province(省份)
"properties": {
"name": {
"type": "text" // 存储类型是text
},
"area": {
"type": "float"
}
}
}
}
}

(3) 创建结果:

{
"acknowledged": true,
"shards_acknowledged": true,
"index": "address"
}

2 查看index

(1) 查看示例:

GET address

// 也可同时查看多个索引, 类似于删除操作:
GET *
GET _all
GET *index*
GET address,shop // 在6.0之前的版本中, 还可以指定返回某些指定项的结果:
GET address/_settings,_mappings
  • 弃用提示:

查看索引时, 若通过","分隔要返回的结果, Elasticsearch将抛出如下警告:

#! Deprecation: Requesting comma-separated features is deprecated and will be removed in 6.0+, retrieve all features instead.

意为: Elasticsearch不推荐使用逗号分隔功能, 将在6.0+中删除. 建议不要使用",", 而是直接检索全部数据, 或检索某一项的结果.

在ES 6.6.0中将直接出现:

{
"error": "Incorrect HTTP method for uri [/address/_settings,_mappings?pretty] and method [GET], allowed: [POST]",
"status": 405
}

换做POST请求时, 必须携带请求体, 仍然不支持.

(2) 查看的结果:

{
"address": {
"aliases": {},
"mappings": {
"province": {
"properties": {
"area" : {
"type" : "float"
},
"name" : {
"type" : "text"
}
}
}
},
"settings": {
"index": {
"creation_date": "1542108754899",
"number_of_shards": "1",
"number_of_replicas": "0",
"uuid": "MMpLNHzZR8K1k48rJplWVw",
"version": {
"created": "6060099"
},
"provided_name": "address"
}
}
}
}

3 修改index

修改索引的示例:

PUT address/_settings
{
"number_of_replicas": 1 // 修改副本数为1
}

说明: Elasticsearch中的分片数(number_of_shards)只能在创建索引时设置, 无论是否添加过数据, 都不支持修改.

这与文档的路由有关, 而Solr的SPLITSHARD可以算作动态修改分片的另一种思路: 只对某一路由范围内的进行拆分, 可以参考 管理SolrCloud集群 (创建集合、切割分片、更新配置) 第5节的内容.

关于修改ES的分片数, 应该有其他思路, 后期了解到再作研究整理.

4 删除index

删除索引需要指明索引名称、别名或通配符.

Elasticsearch支持同时删除多个索引, 或使用_all通配符*删除全部索引.

删除示例:

DELETE address        // 删除指定索引
DELETE index1,index2 // 删除多个索引
DELETE index_* // 按通配符删除以'index_'开头的索引
DELETE _all // 删除全部索引

为避免_all操作误删除全部索引, 可在配置文件elasticsearch.yml中作如下配置:

# 要求操作索引时必须指定索引的名称
action.destructive_requires_name: true

5 打开/关闭index

(1) 操作说明:

① 可以打开一个已经打开/关闭的索引, 以最后一次操作为准;

② 可以关闭一个已经关闭/打开的索引, 以最后一次操作为准;

关闭的索引只能查看index的配置信息, 不能对内部的索引数据进行读写操作.

(2) 操作示例:

// 可以使用_all打开或关闭全部索引, 也可使用通配符(*)配合操作
POST address/_close
POST address/_open

说明事项:

① 使用_all或通配符操作索引, 都会受到配置文件中action.destructive_requires_name=true的限制.

② 关闭的索引会继续占用磁盘空间, 却又不能使用 —— 造成磁盘空间的浪费.

③ 可以在配置文件中禁止使用关闭索引的功能: settingscluster.indices.close.enable=false, 默认为true(开启).

6 常见问题及解决方法

(1) 查看不存在的索引时, 将抛出如下错误信息:

如果要查看的索引不存在, 比如GET addre, 就会抛出类似下面的异常信息:

{
"error" : {
"root_cause" : [
{
"type" : "index_not_found_exception",
"reason" : "no such index",
"resource.type" : "index_or_alias",
"resource.id" : "addre",
"index_uuid" : "_na_",
"index" : "addre"
}
],
"type" : "index_not_found_exception",
"reason" : "no such index",
"resource.type" : "index_or_alias",
"resource.id" : "addre",
"index_uuid" : "_na_",
"index" : "addre"
},
"status" : 404
}

(2) 在6.0之前的版本中, 如果修改已经关闭了的索引, 会抛出类似于下面的错误:

{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Can't update [index.number_of_replicas] on closed indices [[address/MMpLNHzZR8K1k48rJplWVw]] - can leave index in an unopenable state"
}
],
"type": "illegal_argument_exception",
"reason": "Can't update [index.number_of_replicas] on closed indices [[address/MMpLNHzZR8K1k48rJplWVw]] - can leave index in an unopenable state"
},
"status": 400
}

在本篇博客演示所用的Elasticsearch 6.6.0版本中, 并不存在此异常信息.

版权声明

作者: 马瘦风(https://healchow.com)

出处: 博客园 马瘦风的博客(https://www.cnblogs.com/shoufeng)

感谢阅读, 如果文章有帮助或启发到你, 点个[好文要顶

ES 08 - 创建、查看、修改、删除、关闭Elasticsearch的index的更多相关文章

  1. Oracle DBlink的创建-查看与删除

    DBlink常用于在两个Oracle数据库之间相互连接,如手工同步数据时,DBLink是最方便快捷的手段之一. 1.创建DBLink语法:create public database link < ...

  2. java 操作Excel表 创建 查看 修改

    需要用到jxl.jar包  修改有两种方法一种是jxl的  另一种需要apache.poi包 package excelChuLi; import java.io.File; import java. ...

  3. linux专题一之文件管理(目录结构、创建、查看、删除、移动)

    在linux系统中一切都是文件./ 在linux中为根目录,是一切文件的根目录.本文将通过linux系统的目录结构和与linux文件操作有关的相关命令(touch.mkdir.cp.mv.mv.les ...

  4. es手动创建索引,修改索引,删除索引

    1.创建索引 创建索引的语法PUT /my_index{ "settings": { ... any settings ... }, "mappings": { ...

  5. 05Oracle Database 表空间查看,创建,修改及删除

    Oracle Database 表空间查看,创建,修改及删除 查看用户表空间 查看数据库管理员表空间表结构 desc dba_tablespaces; 查询表空间名称从管理员表空间表中 select ...

  6. Oracle触发器原理、创建、修改、删除

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  7. Elasticsearch 创建以及修改索引结构

    从问题出发,这篇内容可以解决以下几个问题: 一:如何开启关闭Es索引(数据库)? 二:如何创建索引(数据库)结构? 三:如何向已有索引(数据库)中添加类型(表)结构? 四:如何向已有类型(表)中添加新 ...

  8. MySQL:创建、修改和删除表

    其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语 ...

  9. <<< Oracle序列的创建、修改、删除基本操作

    序列是一个命名的顺序编号生成器,可以被多个用户共享,类似sqlserver中的identity create sequence 序列名; //直接创建一个序列 CREATE SEQUENCE 序列名; ...

随机推荐

  1. java泛型基础、子类泛型不能转换成父类泛型

    参考http://how2j.cn/k/generic/generic-generic/373.html 1.使用泛型的好处:泛型的用法是在容器后面添加<Type>Type可以是类,抽象类 ...

  2. System.out.println()

    System是java.lang中的类,out为System中的一个静态数据成员,out是java.io.PrintStream类的对象,而println()是java.io.PrintStream类 ...

  3. Dubbo中Directory解析

    Directory代表多个Invoker,可以把它看成List Directory接口 Directory接口继承了Node接口: 1234567 public interface Directory ...

  4. NSQ源码剖析之nsqd

    NSQ简介 NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息.NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障.故障容错.高可用性以及能够保证消息的 ...

  5. ThreadPoolExecutor简介

    ThreadPoolExecutor简介 并发包中提供的一个线程池服务 23456789 public ThreadPoolExecutor(int corePoolSize,//线程池维护线程的最少 ...

  6. VS编译代码未通过,常见问题。

    问题一:LNK2028 这个问题一般是什么函数在哪里被引用.修改的方法是:先检查是否包含头文件,如果已经包含了头文件,则检查在源文件的"import.cpp"中是否包含了该lib文 ...

  7. 【prufer编码+组合数学】BZOJ1005 [HNOI2008]明明的烦恼

    Description 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Solution 这 ...

  8. 复仇者联盟3热映,我用python爬取影评告诉你它都在讲什么

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  9. 微服务架构 - 搭建docker本地镜像仓库并提供权限校验及UI界面

    搭建docker本地镜像仓库并提供权限校验及UI界面 docker本地镜像仓库的作用跟maven私服差不多,特别是公司级或者是小组级开发好的docker仓库可以上传到本地镜像仓库中,需要用时,直接从本 ...

  10. MySQL 复制 - 性能与扩展性的基石 3:常见问题及解决方案

    主备复制过程中有很大可能会出现各种问题,接下来我们就讨论一些比较普遍的问题,以及当遇到这些问题时,如何解决或者预防问题发生. 1 数据损坏或丢失 问题描述:服务器崩溃.断电.磁盘损坏.内存或网络错误等 ...