我的网址/posts
列出了最新的10篇 Activity 帖子。当我编辑最后一个帖子(这10个帖子中的第1个)时,更改似乎没有实时同步到elasticsearch。
这是我的代码:
$post = $this->findPostBy....;
/** @var EntityManager $entityManager */
$entityManager = $this->getDoctrine()->getManager();
$post->setStatus(PostModel::STATUS_DELETED);
$entityManager->persist($post);
$entityManager->flush();
return $this->redirect('/posts');
执行上述代码后,我将被重定向到
/posts
,但是最后一个刚被编辑并且其状态已更改为的帖子被删除了仍被列为最新的10个 Activity 帖子(这肯定是错误的)。它仅在刷新页面(/posts
)时消失。/posts
的代码: /** @var TransformedFinder $finder */
$finder = $this->container->get('fos_elastica.finder.index_name.post');
$query = new Query();
$filter = new Term(array('status' => PostModel::STATUS_ACTIVE));
$query->setFilter($filter);
$query->addSort(array('tttAt' => array('order' => 'desc')));
$posts = $finder->find($query);
我的映射:
types:
post:
mappings:
title:
type: string
analyzer: post_analyzer
description:
type: string
analyzer: post_analyzer
status:
type: integer
tttAt :
type : date
createdAt :
type : date
persistence:
driver: orm
model: MyBundle\Entity\Post
finder: ~
provider: ~
listener: ~
有人可以解释我为什么以及如何解决这个问题吗?
更新:如果我使用xdebug将重定向延迟大约1或2秒,则该帖子将不再在
/posts
中列出。因此,我认为没有足够的时间让ElasticSearch重新编制索引。有什么想法或解决方案吗?
最佳答案
刚刚找到了解决方案,也许不是最好的方法,但至少可以奏效:
/** @var EntityManager $entityManager */
$entityManager = $this->getDoctrine()->getManager();
$post->setStatus(PostModel::STATUS_DELETED);
$entityManager->persist($post);
$entityManager->flush();
/** @var Index $type */
$type = $this->container->get('fos_elastica.index.index_name');
$type->refresh();
重定向前刷新索引将完成:)
关于symfony - Doctrine2和FOSElasticaBundle之间的同步不是实时的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22892125/