根据spec,当 @IndexedEmbedded指向实体时,关联必须是定向的,另一端必须使用@ContainedIn进行注释。如果不是这样,当关联的实体更新时,Hibernate Search将无法更新根索引。
。我是否正确地假设 direction 一词应该是双向?我确实有我的索引没有更新的问题。我有单向关系,例如订购的人,但订购的人不认识。现在,当我更改顺序时,索引不会更新。
如果将关联更改为双向是没有选择的,那么我仍然必须使用休眠搜索吗?是否可以创建两个单独的索引并合并查询?
答案 0 :(得分:0)
我对方向这个词应该是双向的吗?
是的。我会解决这个错字。
如果无法将关联更改为双向,那么我仍然必须使用hibernate-search吗?
如果索引Person
并嵌入Order
,但是Order
与Person
没有反向关联,则Hibernate Search无法检索Person
Order
更改时必须重新编制索引。
因此,您将必须手动重新编制索引:https://docs.jboss.org/hibernate/search/5.11/reference/en-US/html_single/#manual-index-changes。
您可以采用以下两种策略之一:
Person
实体重新编制索引,例如每天晚上。Person
发生变化时,重新为受影响的Order
实体编制索引。基本上,这意味着向您的服务中添加代码,以便每当创建/更新/删除订单时,您都运行查询以检索所有相应人员,并手动为其重新编制索引。 第一个解决方案非常简单,但是有一个很大的缺点,即Person
索引最多可能过24小时。取决于您的用例,这可能没事。
第二种解决方案容易出错,基本上您将在进行Hibernate Search的工作。
总而言之,您真的必须问自己,将关联的反面添加到模型中是否会更好?
是否可以创建两个单独的索引并合并查询?
从技术上讲,如果您使用的是Lucene集成(而不是Elasticsearch集成),那么可以。
但是:
因此,如果您不熟悉Lucene的API,我不建议您这样做。如果您真的想走这条路,这里有一些提示: