Elasticsearch - 索引管理

建立一个索引

咱们已经经过索引一篇文档建立了一个新的索引 。
这个索引采用的是默认的配置,新的字段经过动态映射的方式被添加到类型映射。数据库

索引模板

Elasticsearch 不要求你在使用一个索引前建立它。 对于日志记录类应用,依赖于自动建立索引比手动建立要更加方便。app

Logstash 使用事件中的时间戳来生成索引名。
默认天天被索引至不一样的索引中,所以一个 @timestamp 为 2014-10-01 00:00:01 的事件将被发送至索引 logstash-2014.10.01 中。
若是那个索引不存在,它将被自动建立。elasticsearch

一般咱们想要控制一些新建索引的设置(settings)和映射(mappings)。
也许咱们想要限制分片数为 1 ,而且禁用 _all 域。
索引模板能够用于控制何种设置(settings)应当被应用于新建立的索引:post

PUT /_template/my_logs       #建立一个名为 my_logs 的模板。
{
  "template": "logstash-*",  #将这个模板应用于全部以 logstash- 为起始的索引。
  "order":    1,             #这个模板将会覆盖默认的 logstash 模板,由于默认模板的 order 更低。
  "settings": {
    "number_of_shards": 1    # 限制主分片数量为 1 。
  },
  "mappings": {
    "_default_": { 
      "_all": {                # 为全部类型禁用 _all 域。
        "enabled": false
      }
    }
  },
  "aliases": {
    "last_3_months": {}     # 添加这个索引至 last_3_months 别名中。
  }
}

这个模板指定了全部名字以 logstash- 为起始的索引的默认设置,不论它是手动仍是自动建立的。 若是咱们认为明天的索引须要比今天更大的容量,咱们能够更新这个索引以使用更多的分片。ui

这个模板还将新建索引添加至了 last_3_months 别名中,然而从那个别名中删除旧的索引则须要手动执行。spa

删除索引

删除指定的索引
DELETE /my_index

删除多个索引
DELETE /index_one,index_two
DELETE /index_*

DELETE /_all
DELETE /*
可以用单个命令来删除全部数据可能会致使可怕的后果。
若是你想要避免意外的大量删除,
你能够在你的 elasticsearch.yml 作以下配置: action.destructive_requires_name: true

索引设置

最重要的两个设置日志

  • number_of_shards
    每一个索引的主分片数,默认值是 5 。这个配置在索引建立后不能修改。
  • number_of_replicas
    每一个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置能够随时修改。

咱们能够建立只有 一个主分片,没有副本的小索引code

PUT /my_temp_index
{
    "settings": {
        "number_of_shards" :   1,
        "number_of_replicas" : 0
    }
}

咱们能够用 update-index-settings API 动态修改副本数blog

PUT /my_temp_index/_settings
{
    "number_of_replicas": 1
}

类型和映射

类型 在 Elasticsearch 中表示一类类似的文档。
类型由 名称 —好比 user 或 blogpost —和 映射 组成。索引

映射, 就像数据库中的 schema ,描述了文档可能具备的字段或 属性 、
每一个字段的数据类型—好比 string, integer 或 date —以及Lucene是如何索引和存储这些字段的。

类型的实现

Elasticsearch 类型是 以 Lucene 处理文档的这个方式为基础来实现的。
一个索引能够有多个类型,这些类型的文档能够存储在相同的索引中。

Lucene 没有文档类型的概念,每一个文档的类型名被存储在一个叫 _type 的元数据字段上。 当咱们要检索某个类型的文档时,
Elasticsearch 经过在 _type 字段上使用过滤器限制只返回这个类型的文档。

Lucene 也没有映射的概念。 映射是 Elasticsearch 将复杂 JSON 文档 映射 成 Lucene 须要的扁平化数据的方式。

例如,在 user 类型中, name 字段的映射能够声明这个字段是 string 类型,而且它的值被索引到名叫 name 的倒排索引以前,须要经过 whitespace 分词器分析:

索引别名和零停机

有两种方式管理别名: _alias 用于单个操做, _aliases 用于执行多个原子级操做。

咱们假设你的应用有一个叫 my_index 的索引。事实上, my_index 是一个指向当前真实索引的别名。真实索引包含一个版本号: my_index_v1 , my_index_v2 等等

PUT /my_index_v1 
PUT /my_index_v1/_alias/my_index

查询索引别名指向的索引

GET /*/_alias/my_index

哪些别名指向这个索引

GET /my_index_v1/_alias/*

一个别名能够指向多个索引,因此咱们在添加别名到新索引的同时必须从旧的索引中删除它。这个操做须要原子化,这意味着咱们须要使用 _aliases 操做:

POST /_aliases
{
    "actions": [
        { "remove": { "index": "my_index_v1", "alias": "my_index" }},
        { "add":    { "index": "my_index_v2", "alias": "my_index" }}
    ]
}
相关文章
相关标签/搜索