使用自定义变压器搜索后插入文档时不完全水合

时间:2016-05-19 09:29:10

标签: php symfony foselasticabundle

为了加快搜索结果,我使用了elastica_to_model_transformer的自定义查询,该查询以部分实体的形式检索列表页面所需的20个左右的值。

persistence:
    elastica_to_model_transformer:
         query_builder_method: createSearchQueryBuilder

但是,我发现了一种意想不到的副作用。如果我使用搜索检索某些实体,然后更新这些实体中的值,当对象转换回弹性搜索文档以插入索引时,则只会将20个左右的水合值添加到索引中。

在更新索引之前是否有办法确保对象完全水合,或者在执行某些搜索时是否可以忽略自定义查询?

1 个答案:

答案 0 :(得分:0)

问题正在发生,因为createSearchQueryBuilder返回一个部分实体,只有这个部分实体才会在索引中更新/插入。

所以看起来解决方案是使用

$em->refresh($entity);

从数据库重新加载实体。

这可以用;

  • 在进行任何更改之前运行更新的脚本,
  • 或用于更新或插入索引的doctrine事件监听器的postUpdate

如果自定义查询返回相关实体的部分结果,则添加

非常重要
cascade={"refresh"}

到这些关系的映射。