我一直在使用FOSElasticaBundle将我的文档(它们是通过Doctrine通过Doc保留在db中的Symfony项目中的实体)建立索引到Elastic Search中。 FOSElastica会在所有文档之后自动进行映射和索引。
问题在于,我想对每个文档(在已编制索引的文档和将要在其之后的文档)应用一些操作,因此管道化和轻松运行似乎是一个很好的解决方案。
但是,我无法理解如何将管道应用于已建立索引的文档,您知道如何吗?
我已经看到您可以在ES请求之后添加“ pipeline = my_pipeline_name”,但是您可以为单个文档执行此操作,而我希望它影响所有文档。
答案 0 :(得分:2)
在将数据从一个索引移动到另一个索引时,可以使用Pipeline。
您需要使用Reindex API,以便在数据movement/ingestion_process
期间从一个索引到另一个索引在数据上执行它。
注意:这是索引级别的操作,这意味着它会影响所有文档。
以下是步骤摘要:
temporary_index
source_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 templates和Index 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...],
.
.
.
]]