Мы используем FOSElasticaBundle для интеграции между Doctrine и ElasticSearch.У нас есть много полей, проиндексированных в ES.При непосредственном обновлении одного из сопоставленных объектов FOSElasticaBundle следит за тем, чтобы изменения отражались в ES.Но для случаев, когда обновляется только отношение, изменения не отражаются в ES.
Допустим, у нас есть следующая простая структура сущностей: Фильм имеет жанр многие-к-одному (но не может разрешить фильмы из жанра) Фильмимеет название поля Жанр имеет имя поля
Для фильмов существует индекс ES.И название фильма, и название жанра индексируются для поиска.
При непосредственном изменении фильма изменения синхронизируются.Но когда название жанра меняется, эти изменения не отражаются в ES.
Это довольно тривиальный случай, но в нашем случае нужно рассмотреть много отношений, и большинство из них являются косвенными отношениями.(например, Movie -> Role -> Actor). Мы поняли, что проверка каждого возможного отношения и принудительное индексирование этой связанной сущности - большая работа.
Мы рассмотрели решение ClassMetaData для Doctrine, чтобы найтипуть к нашему индексируемому типу, создание запроса для извлечения проиндексированных сущностей и повторного сохранения их в ES.Однако это было сложно из-за циклических зависимостей.Мы также нашли следующую gist , но она, кажется, только решает прямые отношения и требует, чтобы обновленная сущность также отображалась наоборот.
Есть ли способ разрешить индексированныйсущности, когда (косвенные) отношения обновляются?Не имеет значения, что если есть какие-то ложные срабатывания, но мы не можем синхронизировать весь индекс после того, как какая-либо сущность изменилась.Мы также открыты для других решений, не использующих отображение Doctrine.