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" }}
    ]
}
相關文章
相關標籤/搜索