0

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 ファイルに存在し、フォームを使用してエンティティを投稿すると、コンピューター ファンは 2 分間熱狂し、次の応答が返されます。

「FatalErrorException: エラー: 最大実行時間が 120 秒を超えました」

だから私たちは宇宙で孤独です...

config.yml-settings を変更して、投稿している特定のエンティティが ES にインデックス付けされているエンティティの中に含まれないようにすると、すべてが正常に機能しますが、ES でデータベース行を 1 つだけインデックス付けするだけで、サーバーを起動するのに十分な場合があります。停止するようです。

php app/console fos:elastica:populateデータベースが空の場合、コマンドは終了します。また、1 つのデータベース行を ES にインデックス付けして 1 回か 2 回動作させましたが、データベース内のデータ量が非常に少ない場合でも、ファンがなくても数分間狂ったように動作します。通り過ぎますResetting website(populate-command の実行時に端末が出力する最初の行)。

問題が何であるかを理解するのに役立つかもしれないこと:

  • 以前、このプロジェクトで ES 統合を成功させました。データベースのインデックス作成、データベースに追加された新しいもののインデックス作成、ES での検索 - すべてが魔法のように機能しました。しかし、ES 統合は、これまでメイン プロジェクトとマージされていない特定の git ブランチに保持されていたため、機能しなくなりました。

  • ES 統合ブランチをマスター ブランチ マスター ブランチとマージする前に、マスター ブランチは特に FOSRestBundle を利用しました。

  • master-branch をプルしたチームの他の人も同じ問題を抱えていたので、問題はプロジェクト コードにあり、私の ElasticSearch ノードにあるようには見えません (確かではありませんが)。

何が間違っているのか考えている人はいますか?どんな助けでも歓迎です!

より多くの情報やコードのセクションが問題を特定するのに役立つ場合は、もちろん喜んで提供します。

4

1 に答える 1

1

この問題は、オブジェクトがシリアライズされたときの循環参照によって引き起こされました: http://en.wikipedia.org/wiki/Circular_reference

同様の問題がある場合は、注釈を使用してシリアル化されるプロパティを変更することで解決できます: http://jmsyst.com/libs/serializer/master/reference/annotations

于 2014-05-12T18:26:08.027 に答える