【问题标题】:Is it possible to access field outside of _source in elasticsearch Ingest Pipeline是否可以在elasticsearch Ingest Pipeline中访问_source之外的字段
【发布时间】:2021-04-17 04:15:53
【问题描述】:

我在 elasticstack 中创建可以访问 _source 对象之外的字段的摄取管道时遇到问题。我正在使用弹性堆栈 7.8。这是一个简单的例子:

POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
         "set": {
            "field": "foo_found",
            "value": "true",
            "if": "ctx.foo != null && ctx.foo =~ /foo/"
         }
      },
      {
         "set": {
            "field": "bar_found",
            "value": "true",
            "if": "bar != null && bar =~ /bar/"
         }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "foo": "foofoo"
      },
      "bar":"barbar"
    }
  ]
}

想要的结果如下:

{
 "docs": [
   {
     "doc": {
      "_source": {
        "foo_found": "true",
        "foo": "foofoo",
        "bar_found": "true"
      },
      "bar":"barbar"
     }
   }
 ]
}

管道无法运行。

是否可以访问位于_source 对象之外的bar 字段?

如果第二个set 处理器被删除,该示例将运行,如下所示:

POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
         "set": {
            "field": "foo_found",
            "value": "true",
            "if": "ctx.foo != null && ctx.foo =~ /foo/"
         }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "foo": "foofoo"
      },
      "bar":"barbar"
    }
  ]
}

【问题讨论】:

  • 在代表您的文档的_source 之外有任何字段都是没有意义的,除了“官方”字段,即_id_routing_index

标签: elasticsearch elasticsearch-painless


【解决方案1】:

根据Elasticsearch documentation,要模拟摄取管道,我们只能将_id_index_routing 和/或_source 传递给示例文档。

【讨论】:

    猜你喜欢
    • 2019-07-25
    • 2022-12-27
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多