1. 程式人生 > >elasticsearch(10)重建索引

elasticsearch(10)重建索引

ES對於已存在的索引欄位無法修改,如果要修改索引結構,可以通過新建一個修改結構後的新索引,然後將舊索引中的資料複製到新索引中,變相實現修改索引。

配合索引別名可以實現無縫修改索引結構。

PUT /my_index_v1/_alias/my_index 

示例:將testindex索引下的資料複製到testindex2索引下。預設配置下,對於type和id相同的文件直接覆蓋處理。

POST /_reindex
{
  "source": {
    "index": "testindex"
  },
  "dest": {
    "index": "testindex2"
  }
}

version_type

可以指定引數version_typeexternal

  1. 當源索引文件不存在於目標索引,建立文件
  2. 當源索引文件存在於目標索引且源索引文件版本高於目標索引文件,更新文件
  3. 當源索引文件存在於目標索引且源索引文件版本等於或低於目標索引文件,該文件衝突不更新

當引數version_typeinternal(預設)時,源索引所有文件建立覆蓋。

POST /_reindex
{
  "source": {
    "index": "testindex"
  },
  "dest": {
    "index": "testindex2",
    "version_type": "external | internal"
  }
}

op_type

當指定引數op_typecreate時,_reindex操作只會將目標索引中不存在的文件建立過去,而目標索引中已存在的文件無論版本高低,文件衝突不更新。

POST /_reindex
{
  "source": {
    "index": "testindex"
  },
  "dest": {
    "index": "testindex2",
    "op_type": "create"
  }
}

query

_reindex操作可以增加查詢和type限制文件的數量,也可以從多個索引下複製文件到指定索引。

POST /_reindex
{
  "source": {
    "index": ["testindex"],
    "type": ["testtype"], 
    "query": {
      "match_all": {}
    }
  },
  "dest": {
    "index": "testindex2"
  }
}

sort

_reindex支援選擇性複製指定的文件數量和排序。

POST /_reindex
{
  "size": 10, 
  "source": {
    "index": "testindex",
    "sort": {
      "name": "asc"
    }
  },
  "dest": {
    "index": "testindex2"
  }
}

script

_reindex支援使用指令碼修改文件。

POST /_reindex
{
  "source": {
    "index": "testindex"
  },
  "dest": {
    "index": "testindex2"
  },
  "script": {
    "inline": "ctx._source.name = ctx._source.name + 'v2'"
  }
}