Что ж, я разрабатывал приложение для Symfony 1.4 и Doctrine, когда обнаружил большой недостаток в моей реализации Zend Lucene.
У меня есть модель под названием Publication, которая связана (через отношения внешнего ключа) с несколькимидругие модели (предметы, жанры, языки, авторы и т. д.), и я получаю их имена при добавлении нового документа в указатель (используя методику Jobeet), чтобы я мог искать публикации по заданной теме,жанр, язык, автор и т. д. Проблема в том, что если по какой-то причине я решу изменить имя одной из этих связанных моделей, индекс Zend Lucene не будет обновлен.
Единственные два решения, которые я мог быпридумали:
Регулярно переиндексируйте все публикации, чтобы гарантировать, что любые изменения, внесенные в соответствующие модели, будут обновлены в индексе (однако это решение не позволяет индексуобновляться в режиме реального времени)
Получить все публикации, связанные с данной модельюи переиндексируйте их после обновления (используя save (), postSave (), postUpdate () или все, что вы можете придумать в Doctrine).-> Это решение выглядело великолепно ... Оно будет перестраивать индекс только для публикаций, которые связаны с обновленной моделью, верно?Что ж, если у вас есть что-то вроде тысячи (1000) публикаций, связанных с ним, обновление займет несколько минут (да, я проверял это), а в пользовательской форме это произойдет, потому что это займет более 30 секунд (и даже если это не так).t было бы плохо, если бы пользователь несколько минут смотрел на экран в ожидании загрузки страницы).
Итак, я хочу знать, есть ли другое решение?Есть ли способ обновить индекс на лету, основанный на изменении связанной модели, не повесив весь пакет?Может, поставить задачу на фон или что-то еще?Есть ли такой способ?
Если нет способа сделать это с Lucene, есть ли способ использовать полнотекстовый поиск с MySQL (с таблицами InnoDB) без использования Zend Lucene, у которого нет такого недостатка?Если есть такой инструмент, я бы с радостью реорганизовал мой код для размещения другой библиотеки.
Не могли бы вы помочь мне с этим?Заранее спасибо!