Индексирование FOSElasticaBundle замедляет Symfony

Индексирование вещей в ElasticSearch с использованием FOSElasticaBundle не работает.

Вот из моего конфига (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, и я публикую сущность с помощью формы, компьютерный поклонник будет сходить с ума в течение двух минут, и будет получен следующий ответ:

"FatalErrorException: ошибка: превышено максимальное время выполнения 120 секунд"

Итак, мы одни во вселенной

Когда я изменяю config.yml-settings так, чтобы конкретный объект, который я публикую, не входил в число тех, которые индексируются в ES, все будет работать нормально, но индексации только одной строки базы данных в ES может быть достаточно, чтобы привести сервер кажется, что остановился

php app/console fos:elastica:populate -команда завершится, если база данных пуста, и я также заставил ее работать один или два раза с одной строкой базы данных, индексируемой в ES, но даже при довольно скромных объемах данных в базе данных вентилятор будет работать как сумасшедший в течение нескольких минут, не останавливаясь прошлое Resetting website (первая строка, которую печатает терминал при запуске команды populate).

Что может помочь в понимании проблемы:

  • Ранее я успешно работал с ES-интеграцией в этом проекте. Индексирование базы данных, индексирование новых вещей, добавляемых в базу данных, поиск в ES - все работало, как казалось, очаровательно. Но ES-интеграция была сохранена в определенной git-ветке, которая до сих пор не была объединена с основным проектом, и теперь она больше не работает.

  • До слияния интегрированной с ES ветки с master-веткой и master-веткой master-ветка, среди прочего, использовала FOSRestBundle.

  • У других людей в команде, которые извлекли мастер-ветку, была такая же проблема, поэтому кажется, что проблема в коде проекта, а не в моем ElasticSearch-узле (хотя я не уверен).

Кто-нибудь из вас имеет представление, что может быть не так? Любая помощь будет высоко ценится!

Если больше информации или больше разделов кода могут помочь определить, что не так, я, конечно, с радостью предоставлю вам это.

1 ответ

Решение

Проблема была вызвана циклическими ссылками при сериализации объектов: http://en.wikipedia.org/wiki/Circular_reference.

Если у вас есть похожая проблема, вы можете решить ее, изменив какие свойства сериализуются с помощью аннотаций: http://jmsyst.com/libs/serializer/master/reference/annotations.

Другие вопросы по тегам