如何在已建立索引的文档上使用提取管道?

时间:2019-05-24 09:33:39

标签: php elasticsearch kibana foselasticabundle

我一直在使用FOSElasticaBundle将我的文档(它们是通过Doctrine通过Doc保留在db中的Symfony项目中的实体)建立索引到Elastic Search中。 FOSElastica会在所有文档之后自动进行映射和索引。

问题在于,我想对每个文档(在已编制索引的文档和将要在其之后的文档)应用一些操作,因此管道化和轻松运行似乎是一个很好的解决方案。

但是,我无法理解如何将管道应用于已建立索引的文档,您知道如何吗?

我已经看到您可以在ES请求之后添加“ pipeline = my_pipeline_name”,但是您可以为单个文档执行此操作,而我希望它影响所有文档。

2 个答案:

答案 0 :(得分:2)

在将数据从一个索引移动到另一个索引时,可以使用Pipeline

您需要使用Reindex API,以便在数据movement/ingestion_process期间从一个索引到另一个索引在数据上执行它。

注意:这是索引级别的操作,这意味着它会影响所有文档。

以下是步骤摘要:

  • 创建一个temporary_index
  • 使用Reindex APIsource_index重新索引到temporary_index。还包括管道(下面提供了示例查询)
  • 删除并重新创建source_index。确保在创建索引时也包括映射。
  • 使用source_index作为目标名称,temporary_index作为源名称,执行相同的查询, 没有管道

下面是如何通过管道使用Reindex API

POST _reindex
{
  "source": {
    "index": "source_index_name"
  },
  "dest": {
    "index": "temporary_index",
    "pipeline": "some_ingest_pipeline"
  }
}

让我知道这是否有帮助!

答案 1 :(得分:0)

因此,一段时间后,我找到了一种解决问题的更有效方法:Dynamic templatesIndex templates

我实际上遇到了ElasticSearch无法识别某些类型的字段(例如date或geo_point)的麻烦,因此我借助模板将它们强制用于特定命名的字段。

如果要获取我在FOSElastica(doc is here)中的配置示例:

[[[1,1,1...],
  [2,2,2...],
  [3,3,3...],
  [4,4,4...],
  [1,1,1...],
  [2,2,2...],
  .
  .
  .
]]