【问题标题】:Using a search template in an ingest pipeline在摄取管道中使用搜索模板
【发布时间】:2019-11-20 10:40:00
【问题描述】:

ElasticSearch 摄取管道可以使用搜索模板作为其脚本吗?

具体来说,我想配置一个摄取管道,以便每当进入特定类型的数据时,我们会查询 ElasticSearch 以获取一些相关数据,并根据结果在原始数据上填充一个(或多个字段),在加载之前。

我看到摄取管道可以使用脚本 (https://www.elastic.co/guide/en/elasticsearch/reference/master/script-processor.html),并且脚本可以包含搜索模板 (https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-using.html),但我无法找到任何有关可能将两者结合起来的信息。

【问题讨论】:

  • 您是否询问在摄取管道期间是否可以执行搜索(通过搜索模板)并使用搜索结果填充传入文档中的字段?

标签: elasticsearch data-ingestion elasticsearch-template


【解决方案1】:

实际上,您所要求的功能将通过新的enrich processor 在 7.5 中提供,该功能提供索引时间 JOIN 功能。

主要思想是设置一个enrich policy,它将来自您的相关索引的数据源到一个新的“丰富索引”中,然后您可以使用enrich processor在您的摄取管道中利用该“丰富索引”以按顺序用相关领域丰富您的文档。

因此,无需过多详细说明,以下是它在实践中的工作原理:

  1. 您有一个索引 A,其中包含您希望用于丰富传入文档的字段(abcd
  2. 您根据该索引A 和“加入”字段a 定义丰富策略
  3. 您定义了一个带有丰富处理器的摄取管道,该处理器将尝试将传入文档的字段 z 与丰富索引的字段 A.a 进行匹配
  4. 如果找到匹配项,您的传入文档将从索引A 中获取字段bcd。请注意,它还会获取匹配字段 a,如果需要,您可以使用 remove 处理器删除该字段。

这几乎是您所期望的。你可以找到一个完整的例子here。一开始,它将适用于精确匹配(即term查询)和地理匹配(即geo_shape查询),但它们可能会在不久的将来添加新类型的匹配(如range matches)。

【讨论】:

  • 听起来不错。但是,如果索引A 中的某些更改,是否会触发我正在丰富的索引中匹配文档的重新丰富/更新?
  • 在这种情况下您可以做什么,如果通过应用丰富管道重新索引您的数据并且新数据将被拾取。所以答案是肯定的,但不能保证时间,你的里程可能会根据你的设置方式而有所不同,但这绝对是可能的。
【解决方案2】:

所以ingest script 管道已经是您正在寻找的组合, 你应该使用if 选项,阅读它here

您的管道应如下所示:

{
    "script": {
        "if": "ctx.type == 'thisType'",
        "source": """
                  //calculation here
                  ctx.newField = value;
                  """
    }
}

我建议您在创建管道后使用 simulate 对其进行测试,因为它会让您的生活更轻松。

编辑:

感谢@val 解决了我的一些困惑。 所以你不能真正做你想做的事,但我建议你阅读enrich管道。通过一些设置,您也许可以实现它。

【讨论】:

  • 我认为这不是 OP 所追求的。我想他想知道当文档通过管道传输时,是否可以执行搜索查询来填充要索引的文档。
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 2022-01-26
  • 2020-11-29
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
相关资源
最近更新 更多