有没有一种方法可以将具有特定_id的文档索引到Elasticsearch中?

时间:2020-05-20 11:23:35

标签: api elasticsearch logging indexing

我正在寻找一种模拟在索引中具有特定_id字段的状态。

假设我要在示例中从index1获取完全相同的日志,然后将其索引到index2中。

像这样:

这是我的 index1

{
   _index: "index-number-one",
   _type: "doc",
   _id: "S0meSpec!f!cID",
   _score: 1,
   _source: {
      message: "message1",
      type: "type1",
      tags: [
         "_bla"],
      number: 3
   }
}

现在我要在 index2

中使用完全相同的日志
{
   _index: "index-number-two",
   _type: "doc",
   _id: "S0meSpec!f!cID",
   _score: 1,
   _source: {
      message: "message1",
      type: "type1",
      tags: [
         "_bla"],
      number: 3
   }
}

在Elasticsearch中找不到可以将文档插入具有特定_id字段的索引的API ...(?)

如果无法执行此操作,从而使Elasticsearch集群在_id字段中没有重复项,我可以想象是因为他们想保留通过_id搜索文档的能力 字段,该字段必须是唯一的,在这种情况下,假设我不介意从 index1 中删除整个文档(也许可以将其另存为代码中的某些变量) ,但是最后,我需要 index2 中的文档,使EXACT _id像 index1

如果有一种方法可以编辑现有的_id字段,那么它也可以解决我的问题。

任何人都可以阐明如何实现该目标吗?

2 个答案:

答案 0 :(得分:1)

对自己的回答, 我发现可以在索引的POST请求中完成,如下所示:

POST twitter/test-index-1234/abctype/Som3Cust0mID
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}

以及ES中的结果:

{
_index: "test-index-1234",
_type: "abctype",
_id: "Som3Cust0mID",
_score: 1,
_source: {
   user: "kimchy",
   post_date: "2009-11-15T14:12:12",
   message: "trying out Elasticsearch"
   }
}

答案 1 :(得分:0)

绝对有可能这样做。每个索引(而不是每个集群)的ID都是唯一的。

选中reindex API,它将一个索引复制到另一个索引上,并保留文档ID

还可以使用重新索引调用中的脚本来更改ID。