使用 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 秒”

So we are alone in the universe...

当我更改 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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top