在elasticsearch上复制文档

时间:2019-04-13 10:59:35

标签: elasticsearch kibana

我需要使用kibana控制台克隆我的Elasticsearch索引(在同一索引中)的文档内容。我在文档的_source中需要完全相同的字段(当然,副本将具有另一个ID)。我尝试过:

  1. 获取文档
  2. 创建文档的新空实例
  3. 通过以下方式更新新文档 手动复制(1)上结果的属性:
POST /blog/post/VAv2FWoBKgnBpki61WiD/_update {    "doc" : {
  "content" : "..." ...

但是问题是该字段包含veerery长属性。有时我会出错,因为当我从Kibana界面手动复制字符串时,这些字符串似乎没有被转义。

我在文档中进行了搜索,但是找不到重复文档的查询,这是我认为很普遍的想法...

有任何线索吗?

1 个答案:

答案 0 :(得分:0)

使用Reindex API。这是您可以做的。

步骤摘要:

  • 创建一个destination_index(虚拟)。确保映射source_index
  • 的映射是准确的
  • 使用Reindex API,将该特定文档的 索引从source_index重新索引为desitnation_index。在此操作过程中,更新_id(我已经提到了脚本)
  • 将此文档从desitnation_index重新索引到source_index

重新索引查询

步骤1:将文档从source_index复制到destination_index。 (使用脚本)

POST _reindex
{
  "source": {
    "index": "source_index",
    "query": {
      "match": {
        "_id": "1"
      }
    }
  },
  "dest": {
    "index": "destination_index"
  },
  "script": {
    "inline": "ctx._id=2",
    "lang": "painless"
  }
}

请注意,我如何在上述查询中添加script来更改文档的_id (_id is set as 2)。除了_id字段之外,您的destination_index的所有字段的值都与源字段的值完全相同。

步骤2:将文档从destination_index复制到source_index

POST _reindex
{
  "source": {
    "index": "destination_index",
    "query": {
      "match": {
        "_id": "2"
      }
    }
  },
  "dest": {
    "index": "source_index"
  }
}

现在搜索source_index,它将有两个具有完全相同内容的不同_ids (_id=1 and _id=2)的文档。

希望这会有所帮助!