在上一篇中,我们针对索引 API 相关管理 API 进行了总结,包括常见的 CRUD 及 Elasticsearch 特殊的 API。其中,我们提到,在 Elasticsearch 中,没有直接针对索引本身的“修改” API,而只能修改索引相关的属性。本篇,将介绍与属性相关的 API。

索引的属性主要包括:Mapping(映射)、Alias(别名)、Setting(设置)。对索引的修改,也多是针对此三种属性进行的。

# 映射管理

映射相关的 API 包括有查询映射、修改映射,以及特殊的查询字段映射及查询类型存在。

  • 查询映射

    GET /_mapping
    GET /<target>/_mapping
    

    使用 GET 方法,API 关键字为 _mapping,中间参数是索引名字,可以用通配符代表所有索引,或者用逗号分隔多个索引名字,如果不指定,代表查询所有索引的映射。

  • 修改映射

    PUT /my-index-000001/_mapping
    {
      "properties": {
        "email": {
          "type": "keyword"
        }
      }
    }
    

    使用 PUT 方法,中间参数是索引名字,可以用通配符代表所有索引,也可以用逗号分隔多个索引名字,请求体中为要修改的映射的字段。

    要注意,此方法用于添加新的字段以及对已有字段添加新的属性,而不是真的修改已有字段的属性。

    如果想要修改一个已有字段的属性,官方推荐方式如下:

    1.创建一个正确的新索引

    2.把数据重索引到新索引

    3.删除旧索引

    参阅 变更已有字段的映射 (opens new window)

    如果想要修改一个已有字段的名字,官方推荐方法如下:

    添加一个别名来替代字段名字

    参阅重命名字段 (opens new window)

  • 查询字段映射

    此 API 在“查询映射”的基础,查询更细的“字段”的映射。

    GET /_mapping/field/<field>
    GET /<target>/_mapping/field/<field>
    

    方法为 GET,API 关键字为 /_mapping/field。参数为索引名字和字段名字。如果不指定索引,代表查询所有索引下相应字段的映射。在 Elasticsearch 中,很多名字的查询都支持模糊查询,所以这里的索引名字、字段名字,可以是模糊查询(如:acc*)。

  • 查询类型存在

    从 7.0.0 版本开始,此 API 不再被推荐。

    此 API 主要是用于查询映射的类型是否存在。

    HEAD /<index>/_mapping/<type>
    

    方法为 HEAD,API 关键字为 _mapping,参数为索引名字和类型。如果查到有,响应码为 200,没查到,响应码为 404

# 别名管理

别名相关 API 主要有创建别名、修改别名、查询别名和删除别名。

  • 别名 API

    此 API 可以通过在请求体指定不同的 action 实现对别名的创建、删除和修改(通过在一个请求中删除的同时又创建),还能使用日期数学,实现动态的别名创建。

    POST /_aliases
    {
      "actions" : [
        { "add" : { "index" : "my-index-000001", "alias" : "alias1" } }
      ]
    }
    
  • 创建、修改别名

    此 API 可以创建或修改索引的别名。

    PUT /<index>/_alias/<alias>
    POST /<index>/_alias/<alias>
    PUT /<index>/_aliases/<alias>
    POST /<index>/_aliases/<alias>
    

    方法支持 PUTPOST,API 中关键字为 _alias_aliases。参数分别代表索引名字和别名。

    如果进一步在请求体中使用过滤器,还能实现针对指定数据添加别名。

  • 查询索引别名

    此 API 可以查询索引别名。

    GET /_alias
    GET /_alias/<alias>
    GET /<index>/_alias/<alias>
    

    方法为 GET,API 中关键字为 _alias。参数分别代表索引名字和别名,如果索引名字不指定,就代表所有索引。索引名字也可以使用通配符代表所有索引。

  • 删除索引别名

    此 API 可以删除索引别名。

    DELETE /<index>/_alias/<alias>
    DELETE /<index>/_aliases/<alias>
    

    方法为 DELETE,API 中关键字为 _alias_aliases。参数分别为索引名字和别名。索引名字也可以使用通配符代表所有索引。

# 索引设置

设置相关 API 包括查询设置、修改设置以及特殊的分析 API。

  • 查询设置

    此 API 查询索引的设置(setting)。

    GET /<target>/_settings
    GET /<target>/_settings/<setting>
    

    方法为 GET,API 中关键字为 _settings。参数分别为索引名字和设置名字。不指定索引名字,就代表所有索引,不指定设置名字,就代表所有设置。索引名字和设置名字都支持通配符,通配符代表所有。

  • 修改设置

    此 API 修改动态索引设置。(一定要注意的是,只有符合 Elasticsearch 规定的动态索引设置才能在索引创建后修改)

    PUT /my-index-000001/_settings
    {
      "index" : {
        "number_of_replicas" : 2
      }
    }
    

    方法为 PUT,API 中关键字为 _settings。参数为索引名字。请求体中为要修改的设置。

  • 分析 API

    此 API 用于分析文本。(从学到这里的程度看,和设置本身关系并不大,因为此 API 是用于直接指定分析器对文本进行分析,或者在索引上进行分析。可能学到后面才能理解官方将其放在这里的原因)

    GET /_analyze
    POST /_analyze
    GET /<index>/_analyze
    POST /<index>/_analyze
    

    方法为 GETPOST,API 中关键字为 _analyze,参数为索引名字。

    示例:

    GET /_analyze
    {
      "analyzer" : "standard",
      "text" : "Quick Brown Foxes!"
    }
    

以上,就是索引本身属性相关的 API,包括映射、别名、设置。