我一直在使用FOSElasticaBundle将我的文档(通过Doctrine保存在数据库中的Symfony项目的实体)索引到Elastic Search中。FOSElastica在所有文档之后进行自动Map和索引。
问题是,我想对每个文档应用一些操作(对那些已经索引的文档和那些将要索引的文档),所以管道和无痛似乎是一个很好的解决方案。
但是,我不能理解如何将管道应用于已经索引的文档,你知道如何吗?
我已经看到你可以在ES请求后添加一个“pipeline=my_pipeline_name”,但是你可以对单个文档这样做,而我希望它影响所有文档。
3条答案
按热度按时间sulc1iza1#
您可以在将数据从 * 一个索引 * 移动到 * 另一个索引 * 时使用Pipeline。
您需要使用Reindex API,以便在从一个索引到另一个索引的
movement/ingestion_process
期间对数据执行它。注意:这是 * 索引级操作 *,意味着会影响所有文档。
以下是步骤摘要:
temporary_index
,source_index
到temporary_index
的重索引利用了Reindex API。还包括管道(下面提供了示例查询)source_index
。确保在创建索引时也包括Map。source_index
作为目标名称,temporary_index
作为源名称***执行相同的查询,但不使用管道***下面是如何使用Reindex API与管道
让我知道如果这有帮助!
zwghvu4y2#
所以,过了一段时间,我找到了一个更有效的解决方案:Dynamic templates和Index templates
实际上,我在ElasticSearch无法识别某些类型的字段(如date或geo_point)时遇到了麻烦,所以我在模板的帮助下将它们强制用于专门命名的字段。
如果你想要我在FOSElastica(doc is here)中的配置示例:
ie3xauqp3#
我有类似的问题,我得到的数据(经度和纬度)作为两个不同的领域,我想俱乐部到类型geo_point的单一领域。不确定我是否可以使用dynamic_templates,因此我可以将两个字段(经度和纬度)的值club/ concat到一个名为location的字段中,并将该类型定义为geo_point。