Symfony2 / Elastica-bundle

时间:2017-05-23 15:58:41

标签: symfony elasticsearch foselasticabundle

我刚刚安装了一个带有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

1 个答案:

答案 0 :(得分:1)

FOSElasticaBundle实现了在postFlush事件上发送更新的事件侦听器。

因此,您需要实现自己的事件侦听器,该侦听器将收集有关已调度(用于持久化,更新或删除)实体的信息(您可以查看FOS\ElasticaBundle\Doctrine\Listener作为示例)以及将捕获的事件侦听器您自己的事件,您将手动触发 - 并将更新发送到ES(通过FOS\ElasticaBundle\Persister\ObjectPersister)。

你也可以看看this example