假设我有 50 个文档想要提取到索引中。所以我这样做了,如果我要查询 Elasticsearch,我可以检索 50 个文档。
稍后,也许通过自动化流程,这 50 个文档最终会再次被摄取。我进行查询,看到成对的文档,其中包含除不同
_id
值之外的所有内容。实际上,该对的 20 个字符的 _id
值具有字符 0,1 不同和字符 16-19 不同,但字符 2-15 完全相同。我假设这些 _id
是自动生成的,也许前 2 个字符是某种序列号?
但是我该如何让文档每次都映射到同一个
_id
?
我希望每个唯一的文档映射到相同的
_id
值,这样我的索引就不会多次被完全相同的信息填充。
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,
}