在使用自定义转换器搜索后插入文档时水合作用不完全

Incomplete hydration when inserting documents following a search with a custom transformer

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

persistence:
    elastica_to_model_transformer:
         query_builder_method: createSearchQueryBuilder

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

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

问题的发生是因为 createSearchQueryBuilder returns 是一个部分实体,索引中只有这个部分实体 updated/inserted。

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

$em->refresh($entity);

从数据库重新加载实体。

这个可以用;

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

如果您自定义查询 returns 相关实体的部分结果,那么添加

很重要
cascade={"refresh"}

到这些关系的映射。