Elasticsearch扫盲之三:ElasticSearch文档管理之index操作

在传统的关系型数据中,我们如果想要存储数据,首先得创建数据库和数据库表,定义数据库表的结构,那么在ElasticSearch中,是否需要这么做呢?
我们在向ElasticSearch存入数据时,系统会把我们自动创建index和mapping,当然我们也可以手动去创建index,并指定mapping,手动创建index,可以进行个性化的设置,在实际开发中是有必要的。

一、index的基本操作

注:这里以一个用户信息的index为例:

1.创建index
(1)方法和地址
  • PUT {{indexName}}

即:{{indexName}}为实际的index名称

  1. PUT user
(2)参数

ElasticSearch创建index的参数

  • settings: index配置参数对象
  • mappings: index的数据结构配置对象
  • aliases : 别名配置

注:可以不用任何参数,将会使用系统默认的配置

  1. PUT user
  2. {
  3. "settings":{
  4. "number_of_shards":1
  5. },
  6. "mappings":{
  7. "_doc":{
  8. "properties":{
  9. "user_id":{
  10. "type":"text"
  11. },
  12. "nickname":{
  13. "type":"keyword"
  14. },
  15. "account":{
  16. "type":"text"
  17. },
  18. "email":{
  19. "type":"keyword"
  20. },
  21. "status":{
  22. "type":"integer"
  23. },
  24. "create_time":{
  25. "type":"date",
  26. "format":"epoch_millis"
  27. }
  28. }
  29. }
  30. },
  31. "aliases":{
  32. "user_info":{}
  33. }
  34. }

成功则返回结果:

  1. {
  2. "acknowledged" : true,
  3. "shards_acknowledged" : true,
  4. "index" : "user"
  5. }
  • settings的配置项说明将在之后
  • _doc为指定的type的名称,ElasticSearch 6.x不建议再使用type,7.x将以_doc来作为默认的type(7.x将删除type)
  • 将索引index的索引别名指定为user_info
2.删除index
  • DELETE {{indexName}}
  1. DELETE user
3.获取index信息
(1)检测index是否存在
  • HEAD {{indexName}}
  1. HEAD user
  • 存在将返回200的网络状态码
  • 不存在将返回404的网络状态码
(2)获取index的相关配置信息
  • GET {{indexName}}
  1. GET user

成功将返回以下数据(定义的或默认的配置信息):

  1. {
  2. "user" : {
  3. "aliases" : {
  4. "user_info" : { }
  5. },
  6. "mappings" : {
  7. "_doc" : {
  8. "properties" : {
  9. "account" : {
  10. "type" : "text"
  11. },
  12. "create_time" : {
  13. "type" : "date",
  14. "format" : "epoch_millis"
  15. },
  16. "email" : {
  17. "type" : "keyword"
  18. },
  19. "nickname" : {
  20. "type" : "keyword"
  21. },
  22. "status" : {
  23. "type" : "integer"
  24. },
  25. "user_id" : {
  26. "type" : "text"
  27. }
  28. }
  29. }
  30. },
  31. "settings" : {
  32. "index" : {
  33. "creation_date" : "1553936128847",
  34. "number_of_shards" : "1",
  35. "number_of_replicas" : "1",
  36. "uuid" : "yzQ3BSPfQ9a7lw_fcySE-A",
  37. "version" : {
  38. "created" : "6070099"
  39. },
  40. "provided_name" : "user"
  41. }
  42. }
  43. }
  44. }
4.重建索引_reindex

_reindex的API可以将原来一个index的数据导入到另外一个新的index中

基语法如下:

  • 请求方式和请求地址:POST _reindex
  • 参数:
    • source : 指定原索引对象
      • index : 原索引名称
    • dest : 指定目标索引名称
      • index : 目标索引名称
  1. POST _reindex
  2. {
  3. "source":{"index":"user"},
  4. "dest":{"index":"member"}
  5. }

注:index是没有修改操作的,如果要修改index的相关配置:如修改settings配置,可以通过settings的API来操作,mappings是不能修改的,只能通过重建index来实现;如果要修改别名配置,可以通过aliases的API来实现。

二、index的配置settings操作详解

1.settings配置获取
  • GET /{{indexName}}/_settings
  • GET /{{indexName}}获取index信息,在响应数据中找到settings字段即可
  1. GET /user/_settings

返回结果:

  1. {
  2. "user" : {
  3. "settings" : {
  4. "index" : {
  5. "creation_date" : "1553936128847",
  6. "number_of_shards" : "1",
  7. "number_of_replicas" : "1",
  8. "uuid" : "yzQ3BSPfQ9a7lw_fcySE-A",
  9. "version" : {
  10. "created" : "6070099"
  11. },
  12. "provided_name" : "user"
  13. }
  14. }
  15. }
  16. }
2.settings配置修改
  • 请求方式和地址:PUT /{{indexName}}/_settings
  • 请求参数:配置项对象

注:只有部分配置项能修改

  1. PUT /user/_settings
  2. {
  3. "number_of_replicas": 0
  4. }

index的配置项说明请参考:ElasticSearch的settings配置项参数说明

四、index的数据结构配置mappings操作详解

mapping类似于文档的数据结构,用来定义结构和字段的数据类型

1.获取mapping
  • GET /{{indexName}}/_mapping
  1. GET /user/_mapping

获取响应结果:

  1. {
  2. "user" : {
  3. "mappings" : {
  4. "_doc" : {
  5. "properties" : {
  6. "account" : {
  7. "type" : "text"
  8. },
  9. "create_time" : {
  10. "type" : "date",
  11. "format" : "epoch_millis"
  12. },
  13. "email" : {
  14. "type" : "keyword"
  15. },
  16. "nickname" : {
  17. "type" : "keyword"
  18. },
  19. "status" : {
  20. "type" : "integer"
  21. },
  22. "user_id" : {
  23. "type" : "text"
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }
2.创建mapping

只能在创建index时指定mapping,而且不能修改

  • mappings:
    • _doc : 指定type
      • properties :
        • fieldName:字段名称

每个字段可以定义以下属性:

ElasticSearch中mapping字段的定义

  1. PUT user
  2. {
  3. "mappings":{
  4. "_doc":{
  5. "properties":{
  6. "user_id":{
  7. "type":"keyword"
  8. },
  9. "password":{
  10. "type":"text",
  11. "index":false
  12. },
  13. "nickname":{
  14. "type":"text",
  15. "analyzer":"english"
  16. }
  17. }
  18. }
  19. }
  20. }

在创建index是指定mappings参数,关于mapping中的字段数据类型请参考ElasticSearch的mapping字段数据类型详解

五、index的别名配置alias操作详解

1.别名aliases的作用

现有index的一个别名,只要用于修改mapping时,重建索引

2.创建aliases

在创建index时,指定别名

(1)无过滤条件
  1. PUT user
  2. {
  3. "aliases":{
  4. "member":{}
  5. }
  6. }
(2)有过滤条件
  1. PUT user
  2. {
  3. "aliases":{
  4. "member":{
  5. "index":"user",
  6. "filter":{
  7. "term":{
  8. "status":1
  9. }
  10. }
  11. }
  12. }
  13. }
3.添加或删除别名
  • 请求方式和地址:POST /_aliases
  • 请求参数:
    • actions:
      • add
        • index : 要添加别名的index
        • alias : 添加的别名
      • remove
        • index : 要删除的别名的index
        • alias : 别名
  1. POST _aliases
  2. {
  3. "actions":[
  4. {"add":{"index":"user", "alias":"profile"}},
  5. {"remove":{"index":"user", "alias":"member"}}
  6. ]
  7. }