Вы видите подобные сообщения в своих лог-файлах?
Sep 03 18:52:21 symfony [err] {sfException} File '/home/username/symfony_project/data/index/MyIndex/en/_1nws_s.del' is not readable. in /home/username/symfony_project/plugins/sfLucenePlugin/lib/vendor/Zend/Search/Lucene/Storage/File/Filesystem.php line 59
Если да, то, возможно, ключевым моментом является то, что ваш индекс поврежден из-за большого количества одновременно открытых файлов на вашем сервере. Это ограничение, которое часто встречается на виртуальном хостинге, поскольку другие пользователи, даже если на разных виртуальных серверах, добавляют много файлов для чтения / записи, особенно для веб-серверов.
Lucene создает новые фрагменты индекса для каждого обновления, и со временем это означает, что индекс распространяется по нескольким файлам, а не по хорошо оптимизированному индексу только из одного файла. Это означает, что вероятность ошибки параллелизма увеличивается со временем для плохо оптимизированного индекса. Часто может помочь оптимизация, но это может занять много времени для больших индексов, и вы все еще рискуете ошибкой параллелизма, даже если это более низкая вероятность.
Хитрость в решении этой проблемы состоит в том, чтобы сбалансировать график оптимизации с помощью cronjob, а также, как вы заметили, не обновлять индекс для тривиальных изменений данных (например, измененных дат, количества просмотров).
В последнем случае вы можете создать метод softUpdate()
в каждом из ваших классов моделей, которые составляют часть индекса. Создайте здесь некоторую логику, которая исключает тривиальные обновления столбцов и не перехватывает обновления поискового индекса sfLucenePlugin. Теперь это не так просто, как кажется, так как sfLucenePlugin использует поведения Propel, которые запускаются «глобально» для ваших объектов ...
Решение состоит в том, чтобы редактировать поведение напрямую или отбросить поведение и написать свои собственные методы для обновления индекса. К счастью, хороший пример функций, необходимых для этого, в учебном курсе Symfony Jobeet, день 17: http://www.symfony -project.org / jobeet / 1_4 / Propel / en / 17 # chapter_17_sub_the_save_method
Недостатком здесь является то, что вам может понадобиться «перестроить» стратегию индексирования, которую вы аккуратно сформировали в синтаксисе YAML sfLucenePlugin в PHP ... Синтаксис не сложный, но сложность может быть.
Надеюсь, это имеет смысл и чем-то помогает.