我们正在使用FOSElasticaBundle在Doctrine和ElasticSearch之间进行集成。 我们在ES中索引了很多字段。直接更新其中一个映射实体时,FOSElasticaBundle确保更改反映在ES中。 但是对于仅更新关系的情况,更改不会反映在ES中。
可以说我们具有以下简单的实体结构: 电影具有多对一类型(但无法解析类型的电影) 电影有现场标题 流派有一个字段名称
电影有一个ES索引。电影名称和流派名称都会被索引以进行搜索。
直接更改电影时,更改将同步。 但是,如果更改了流派的名称,则更改不会反映在ES中。
这是一个非常琐碎的情况,但是在我们的情况下,有很多关系需要考虑,其中大多数是间接关系。 (例如,电影->角色->演员) 我们已经意识到,检查每个可能的关系并强制再次为该相关实体建立索引是一项艰巨的工作。
我们已经研究了解析Doctrine的ClassMetaData来找到索引类型的路径,创建了一个查询以检索索引的实体并将其再次保存在ES中。但是,由于循环依赖性,这变得很复杂。 我们还发现了以下gist,但它似乎只能解决直接关系,并且要求将更新后的实体也映射为相反的方向。
(间接)关系更新时,是否可以解决索引实体?如有误报并不重要,但是在任何实体发生更改后,我们都无法同步整个索引。我们也欢迎不使用教义映射的其他解决方案。