如果同一个文档在两个不同时间被摄取,如何在Elasticsearch中拥有相同的id

问题描述 投票:0回答:1

假设我有 50 个文档想要提取到索引中。所以我这样做了,如果我要查询 Elasticsearch,我可以检索 50 个文档。

稍后,也许通过自动化流程,这 50 个文档最终会再次被摄取。我进行查询,看到成对的文档,其中包含除不同

_id
值之外的所有内容。实际上,该对的 20 个字符的
_id
值具有字符 0,1 不同和字符 16-19 不同,但字符 2-15 完全相同。我假设这些
_id
是自动生成的,也许前 2 个字符是某种序列号?

但是我该如何让文档每次都映射到同一个

_id

我希望每个唯一的文档映射到相同的

_id
值,这样我的索引就不会多次被完全相同的信息填充。

elasticsearch
1个回答
0
投票

您可以使用

fingerprint
摄取处理器 根据文档中的字段计算
_id
字段。

您需要决定使用哪些字段,也就是说,是什么使文档“唯一” - 是所有字段,还是有您想要使用的特定标识符字段。

然后定义一个摄取管道,例如

PUT _ingest/pipeline/auto-id
{
  "processors": [
    {
      "fingerprint": {
        "fields": ["field1", "field2", "field3"],
        "target_field": "_id"
      }
    }
  ]
}

当您摄取文档时,您指定要使用此管道

POST my-index/_doc?pipeline=id-fingerprint
{
  "field1": "one",
  "field2": "2",
  "field3": 3,
}
© www.soinside.com 2019 - 2024. All rights reserved.