如何从现有索引在elasticsearch中创建重复索引?

uyto3xhc  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(2)|浏览(863)

我在elasticsearch中有一个包含Map和数据的现有索引,我需要复制该索引以测试新开发。是否仍要从现有索引创建临时/重复索引?
我来自一个sql背景,我正在研究与

SELECT * 
INTO TestIndex
FROM OriginalIndex
WHERE 1 = 0

我尝试了克隆api,但无法使其工作。
我正在尝试克隆使用:

POST /originalindex/_clone/testindex
{
}

但这会导致以下例外情况:

{
  "error": {
    "root_cause": [
      {
        "type": "invalid_type_name_exception",
        "reason": "Document mapping type name can't start with '_', found: [_clone]"
      }
    ],
    "type": "invalid_type_name_exception",
    "reason": "Document mapping type name can't start with '_', found: [_clone]"
  },
  "status": 400
}

我知道有人会很快指引我。提前谢谢你们这些好心人。

holgip5t

holgip5t1#

贴出问题后不久,我想出了一个办法。
首先,获取原始索引的属性:

GET originalindex

复制属性并放入新索引:

PUT /testindex
{
    "aliases": {...from the above GET request},
    "mappings": {...from the above GET request},
    "settings": {...from the above GET request}
}

现在我有了一个新的测试索引。

8yoxcaq7

8yoxcaq72#

首先,必须将源索引设置为只读

PUT /originalindex/_settings
{
  "settings": {
    "index.blocks.write": true
  }
}

然后你就可以克隆了

POST /originalindex/_clone/testindex

如果需要将文档复制到新索引,可以使用reindex api

curl -X POST "localhost:9200/_reindex?pretty" -H 'Content-Type: 
application/json' -d'
{
  "source": {
    "index": "someindex"
  },
  "dest": {
    "index": "someindex_copy"
  }
}
'

(见:https://wrossmann.medium.com/clone-an-elasticsearch-index-b3e9b295d3e9)

相关问题