在使用自定义转换器搜索后插入文档时水合作用不完全
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"}
到这些关系的映射。
为了加快搜索结果的速度,我对 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"}
到这些关系的映射。