FOSElasticaBundle 索引导致 Symfony 停止运行
-
21-12-2019 - |
题
使用 FOSElasticaBundle 对 ElasticSearch 中的内容建立索引不起作用。
这是我的配置(app/config/config.yml):
fos_elastica:
clients:
default: { host: localhost, port: 9200 }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
website:
client: default
types:
idea:
mappings:
title: { boost: 6 }
persistence:
driver: orm
model: Ideside\IdeaBundle\Entity\Idea
provider: ~
finder: ~
listener: ~
当我注释掉所有这些,使事情不会在 ES 中建立索引时,一切都会正常工作。但是,当它出现在 config.yml 文件中,并且我使用表单发布实体时,计算机风扇会疯狂地持续两分钟,并且将返回以下响应:
“致命错误异常:错误:超过最大执行时间 120 秒”
当我更改 config.yml-settings 以便我发布的特定实体不在被索引到 ES 的实体之列时,一切都会正常工作,但在 ES 中仅索引一个数据库行就足以使服务器似乎停止了。
这 php app/console fos:elastica:populate
- 如果数据库为空,命令将完成,并且我还让它工作一两次,其中一个数据库行被索引到 ES,但即使数据库中的数据量相当少量,风扇也会疯狂地运行几分钟而不会停止过去的 Resetting website
(运行 populate 命令时终端打印的第一行)。
可能有助于理解问题所在的事情:
我之前已经在这个项目中成功地进行了 ES 集成。为数据库建立索引,为添加到数据库中的新内容建立索引,在 ES 中进行搜索 - 一切看起来都很有魅力。但是 ES 集成保留在特定的 git 分支上,该分支之前尚未与主项目合并,现在它不再起作用了。
在将 ES 集成分支与主分支合并之前,主分支除其他外还使用了 FOSRestBundle。
团队中拉出主分支的其他人也遇到了同样的问题,所以问题似乎出在项目代码上,而不是我的 ElasticSearch 节点上(尽管我不能确定)。
你们中有人知道可能出了什么问题吗?任何帮助都会 深 赞赏!
如果更多信息或更多代码段可以帮助识别问题所在,我当然很乐意为您提供。
解决方案
该问题是由对象序列化时的循环引用引起的: http://en.wikipedia.org/wiki/Circular_reference.
如果您遇到类似的问题,可以通过修改使用注释序列化的属性来解决它: http://jmsyst.com/libs/serializer/master/reference/annotations.