创建/更新文档日期的摄取管道

2023-11-27

我正在尝试实现类似于 Mysql 的行为,为我通过 ES 管道索引的每个文档的元数据添加 insert_at/updated_at 。

我的管道是这样的:

{
  "description": "Adds createdAt and updatedAt style timestamps",
  "processors": [
    {
      "set": {
        "field": "_source.indexed_at",
        "value": "{{_ingest.timestamp}}",
        "override": false
      }
    },
    {
      "set": {
        "field": "_source.updated_at",
        "value": "{{_ingest.timestamp}}",
        "override": true
      }
    }
  ]
}

我没有映射,只尝试添加一个文档:

POST test_pipelines/doc/1?pipeline=timestamps
{
  "foo": "bar"
}

管道创建成功indexed_at and updated_at:

{
  "_index": "test_pipelines",
  "_type": "doc",
  "_id": "1",
  "_score": 1,
  "_source": {
    "indexed_at": "2018-07-12T10:47:27.957Z",
    "updated_at": "2018-07-12T10:47:27.957Z",
    "foo": "bar"
  }
}

但如果我尝试更新 doc 1 字段indexed_at每次更新文档的日期都会发生变化。

更新请求示例:

POST test_pipelines/doc/1?pipeline=timestamps
{
  "foo": "bor"
}

有什么方法可以告诉处理器不要更新indexed_at field?


发生这种情况的原因是因为set处理器只会在您发送的文档的上下文中运行,而不是在存储的文档(如果有)的上下文中运行。因此,override此处无效,因为您发送的文档既不包含indexed_at nor updated_at,这就是为什么在每次调用时都设置这两个字段的原因。

当你PUT第二次您的文档,您没有更新它,您实际上是从头开始重新索引它(即您正在覆盖您发送的第一个版本)。摄取管道不适用于更新操作。例如,如果您尝试以下更新调用,它将失败。

POST test_pipelines/doc/1/_update?pipeline=timestamps
{
  "doc": {
    "foo": "bor"
  }
}

如果您想坚持使用摄取管道,使其发挥作用的唯一方法是GET首先更新文档,然后更新所需的字段。例如,

# 1. index the document the first time
PUT test_pipelines/doc/1?pipeline=timestamps
{
  "foo": "bar"
}

# 2. GET the indexed document
GET test_pipelines/doc/1

# 3. update the foo field and index it again
PUT test_pipelines/doc/1?pipeline=timestamps
{
  "indexed_at": "2018-07-20T05:08:52.293Z",
  "updated_at": "2018-07-20T05:08:52.293Z",
  "foo": "bor"
}

# 4. When you GET the document the second time, you'll see your pipeline worked
GET test_pipelines/doc/1

这将返回:

{
  "indexed_at": "2018-07-20T05:08:52.293Z",
  "updated_at": "2018-07-20T05:08:53.345Z",
  "foo": "bor"
}

我绝对同意这确实很麻烦,但是我上面给出的链接列举了更新操作不支持管道的所有原因。

另一种让它按照您喜欢的方式工作(没有管道)的方法是使用脚本化的 upsert 操作(其工作方式类似于上面的步骤 2 和 3,即在单个原子操作中 GET 和 PUT 文档),这也可以工作与您的批量通话。基本上是这样的。首先,您需要存储一个脚本,您将调用该脚本来执行索引和更新操作:

POST _scripts/update-doc
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.foo = params.foo; ctx._source.updated_at = new Date(); if (ctx._source.indexed_at == null) ctx._source.indexed_at = ctx._source.updated_at;"
  }
}

然后,您可以像这样第一次索引您的文档:

POST test_pipelines/doc/1/_update
{
  "script": {
    "id": "update-doc",
    "params": {
      "foo": "bar"
    }
  },
  "scripted_upsert": true,
  "upsert": {}
}

索引文档将如下所示:

{
    "updated_at": "2018-07-20T05:57:40.510Z",
    "indexed_at": "2018-07-20T05:57:40.510Z",
    "foo": "bar"
}

您可以在更新文档时使用完全相同的调用:

POST test_pipelines/doc/1/_update
{
  "script": {
    "id": "update-doc",
    "params": {
      "foo": "bor"             <--- only this changes
    }
  },
  "scripted_upsert": true,
  "upsert": {}
}

更新后的文档将如下所示,正是您想要的:

{
    "updated_at": "2018-07-20T05:58:42.825Z",
    "indexed_at": "2018-07-20T05:57:40.510Z",
    "foo": "bor"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建/更新文档日期的摄取管道 的相关文章

随机推荐

  • 在詹金斯工作中通过 FTP 下载文件?

    似乎只能使用以下命令通过 FTP 上传文件 https wiki jenkins ci org display JENKINS Publish Over FTP Plugin 但是我需要通过 FTP 下载一个文件 我可以为此编写一个 gro
  • 数组之前的 Ruby * 运算符[重复]

    这个问题在这里已经有答案了 可能的重复 理解范围和数组中的 ruby splat 谁能告诉我下面代码中 的作用是什么 line name yabbi language ruby Hash line split Thanks 是 splat
  • jquery validate需要点击submit两次才能提交表单

    我在模态中有一个表单 用户必须填写表单 否则验证将显示必填字段错误消息 然后单击提交输入类型 它什么也不做 然后再次单击它 然后它将通过ajax发布 并返回 谢谢 消息 我已经浏览了 Stackoverflow 并应用了我遇到的问题的答案
  • CPAN 首次启动(代理配置)

    我需要通过代理运行 cpan 但是当我尝试配置时出现错误 并且第一次无法进入 cpan root srv linux01 cpan CPAN pm requires configuration but most of it can be d
  • 使用 ASP.NET 日历控件时如何隐藏周末?

    有时 在显示日历时 需要防止显示周末日期和日期标题中的周末名称 有没有办法使用ASP NET 日历控件 由于提供了控件 因此在不重写控件的情况下无法执行此操作 执行此操作的一种方法是覆盖当天渲染 and Render在将输出发送回客户端之前
  • 在应用程序购买中,用户在应用程序处于后台时取消交易:交易状态保持在购买状态

    当应用程序处于后台且用户尚未登录商店时 我在应用程序购买 沙盒环境 中取消用户时出现一些奇怪的行为 流程如下 用户未登录 未在 设置 gt 商店 中设置应用程序 ID 用户点击购买按钮 这调用 SKPaymentQueue defaultQ
  • 动态地将可调用对象添加到类作为实例“方法”

    我实现了一个元类 它拆除用它创建的类的类属性 并根据这些参数的数据构建方法 然后将这些动态创建的方法直接附加到类对象 所讨论的类允许轻松定义 Web 表单对象在网络测试框架中使用 它一直工作得很好 但现在我需要添加一种更复杂类型的方法 为了
  • 在ios中使用查询字符串创建NSURLRequest

    我在 ios 中创建了一个用户查询表单 我使用 php 作为服务器端 我在 IOS 中构造了如下所示的查询字符串 http www mydomain in androidmail enquiry php name Vinoth Kumar
  • 如何将包含单引号的字符串保存到 PostgreSQL 中的文本列

    我在 Smartwcm Web 应用程序 SDK 中使用 hibernate 和 PostgreSQL 作为数据库 我在其中一个表中有一个字段 其数据类型是文本 当我尝试使用 hibernate 使用相应的 POJO 将值插入表中时 如果我
  • 无法使用 VS 2013 RTM 编译 OpenCV 2.4.5

    有人用 VS 2013 RTM 编译过 openCV 吗 我尝试在 IlmImf 模块中获取一堆 min 不属于命名空间 std max 不属于命名空间 std 并且 opencv features2d 无法编译并出现以下错误 opencv
  • 如何设置
    元素的箭头样式?

    我正在使用这段代码 另请参阅JSFiddle 以更改悬停时箭头的背景颜色 但是 这不起作用 因为箭头仅在单击时更改其颜色 summary webkit details marker color B6B6B6 font size 20px m
  • ClassInitialize 中生成的数据驱动测试:不再在 Visual Studio 2012 中工作

    我已从 Visual Studio 2010 升级到 Visual Studio 2012 在我的单元测试项目中 我有一个 ClassInitialize 方法 它生成一个 CSV 文件 然后使用连接到 CSV 的 DataSource 将
  • 数据库如何自动生成唯一标识符?

    我有一个带有 id guid 列的 sql 表 如何强制数据库为每条新记录自动生成新的 guid Add DEFAULT newid
  • Global.asax 中的 ASP.NET 路由

    我试图通过以下方式在我的 Web 表单应用程序中添加一条路线 http msdn microsoft com en us library cc668201 aspx adding routes to a web forms applicat
  • faces-redirect 和后退按钮导致其他链接无法正常工作

    我有一个关于面孔导航的问题 所以我有一个页面 它采用请求参数来加载特定用户 此页面显示 commandLink 列表 单击该列表后 将使用隐式导航重定向到另一个页面 通过调用 preRenderView 中的方法来加载用户 我们重定向到的页
  • 如何将协作者添加到 Firebase 应用程序?

    在最新版本的Firebase 在 Google I O 2016 期间宣布 如何将我想要的其他人添加到我的项目或应用程序中collaborate和 我通过以下途径认识了 IAM 角色Settings gt Permissions 这是正确的
  • Bootstrap Tour 不记得我离开的地方

    当我到达第二页时 我在多页游览中启动 Bootstrap Tour 时遇到问题 我以点击事件开始游览localStorage被设定为false 游览从单击事件开始正常 但是当我转到游览的第二步并加载新页面时 游览不会从中断处继续 如何在这个
  • 使 WCHAR 为空终止

    我有这个 WCHAR 文件名 1 作为函数的返回值 它是 sys 32 函数 因此我无法更改返回的类型 我需要使 fileName 以 null 结尾 因此我尝试将 0 附加到它 但似乎没有任何效果 一旦我得到一个以 null 结尾的 WC
  • Jasper Reports 使用 comparatorExpression 进行交叉表排序

    我正在尝试根据某些自定义方案对交叉表中的动态列进行排序 在文档中 我发现提到了comparatorExpression 交叉表组存储桶比较器表达式 这个表达式的结果是 用于按升序或降序对存储桶进行排序 如果没有比较器 指定表达式时 将使用自
  • 创建/更新文档日期的摄取管道

    我正在尝试实现类似于 Mysql 的行为 为我通过 ES 管道索引的每个文档的元数据添加 insert at updated at 我的管道是这样的 description Adds createdAt and updatedAt styl