gpt4 book ai didi

elasticsearch - 如何在 Elasticsearch 管道中指定文档版本?

转载 作者:行者123 更新时间:2023-11-29 02:50:25 25 4
gpt4 key购买 nike

我目前使用的摄取节点管道如下所示:

{
"my-pipeline": {
"description": "pipeline for my filebeat",
"processors": [
{
"json": {
"field": "message",
"add_to_root": true,
"on_failure": [
{
"rename": {
"field": "message",
"target_field": "originalMessage",
"ignore_missing": true
}
},
{
"set": {
"field": "indexName",
"value": "pipeline-errors"
}
},
{
"set": {
"field": "indexType",
"value": "pipeline-error"
}
},
{
"rename": {
"field": "@timestamp",
"target_field": "errorTimestamp",
"ignore_missing": true
}
}
]
}
},
{
"remove": {
"field": "@timestamp",
"ignore_failure": true
}
},
{
"remove": {
"field": "message",
"ignore_failure": true
}
},
{
"script": {
"inline": "ctx._index = ctx.indexName; ctx._type=ctx.indexType; if (ctx.docVersion != null) {ctx._version = ctx.docVersion; ctx._version_type='external'}"
}
},
{
"remove": {
"field": "indexName",
"ignore_failure": true
}
},
{
"remove": {
"field": "indexType",
"ignore_failure": true
}
}
]
}
}

此管道用于简单地拆箱由 filebeat 转发的日志。在脚本处理器中,我查找“indexName”和“indexType”字段并将其分别分配给“_index”和“_type”。由于我需要考虑版本,因此日志中包含一个“版本”字段(但这是可选的,因为某些日志不包含版本)。

使用此管道触发器:

org.elasticsearch.index.mapper.MapperParsingException: Cannot generate dynamic mappings of type [_version] for [_version]
at org.elasticsearch.index.mapper.DocumentParser.createBuilderFromFieldType(DocumentParser.java:656) ~[elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.index.mapper.DocumentParser.parseDynamicValue(DocumentParser.java:805) ~[elasticsearch-5.5.0.jar:5.5.0]

到目前为止我尝试过的(更新于 09-16):

  • 将字段名称替换为“docVersion”之类的名称如果它是关键字,请确保它不会发生冲突。这不起作用也是
  • 尝试使用 ctx._source.version,这会触发 ScriptException[运行时错误];毕竟,请注意 _index 和 _type 值分别来自 ctx.indexName 和 ctx.indexType
  • 也尝试在脚本中添加“version_type=external”;我仍然得到上述 MapperParsingException;
  • 尝试使用“version_type=external_gte”,但我也遇到了 MapperParsingException

使用摄取节点管道时,如何在 elasticsearch 文档中指定/使用外部版本控制?如果这无法通过管道的脚本处理器实现,那么在使用 filebeat-to-elasticsearch 以拒绝旧版本文档的方式时,有哪些选择可以使用外部版本?

2017 年 10 月 24 日更新似乎这是当前 elasticsearch 版本(在我的情况下为 5.6)不存在的功能。根据检查 code ,管道执行服务中的 IndexRequest 不包含对文档版本或版本类型的任何引用,因此默认为内部版本。也许这可以作为一项功能添加到 future 的 elasticsearch 版本中。

最佳答案

以下变量可通过 ctx 映射获得:_index、_type、_id、_version、_routing、_parent、_now 和 _source。您可以通过 ctx._source.field-name 访问字段的原始来源。

看起来脚本正在尝试通过 ctx.version 访问名为“version”的文档字段,但它映射到 ctx._version。

内部 doc 值应该被检索为 ctx._source.version ,你能试试吗?

关于elasticsearch - 如何在 Elasticsearch 管道中指定文档版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46722655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com