Индексирование 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.