我刚刚安装了一个带有elastica bundle的symfony2项目,elasticsearch正在运行。 我已经配置了fos_elastica,以便我的实体(示例车)将自动重新索引在elasticsearch中。 一切都很好。
以下是它的工作原理:
在我的控制器中
$em->flush();
然后当实体持久存储在数据库中时,它会调用
$this->dispatchPostFlushEvent();
现在在ContainerAwareEventManager.php中,我可以找到方法dispatch事件,该事件将引发事件以在弹性搜索中重新索引实体(在dispatchEvent()中)
我期望做的是手动而不是自动提升此事件
我的意思是这种用法:
$em->flush();
$em->flushAndReindexEs();
或
$em->flush()
$this->raiseEvent('reindex-elastic-entity', $em, array('title' => 'string')
有人看到一种简单的方法来做这件事吗?
我追求调查dispatchEvent。
任何帮助都会有所帮助;) THX
答案 0 :(得分:1)
FOSElasticaBundle
实现了在postFlush
事件上发送更新的事件侦听器。
因此,您需要实现自己的事件侦听器,该侦听器将收集有关已调度(用于持久化,更新或删除)实体的信息(您可以查看FOS\ElasticaBundle\Doctrine\Listener
作为示例)以及将捕获的事件侦听器您自己的事件,您将手动触发 - 并将更新发送到ES(通过FOS\ElasticaBundle\Persister\ObjectPersister
)。
你也可以看看this example。