hibernate-search for one-directional associations
hibernate-search for one-directional associations
根据spec,当@IndexedEmbedded 指向实体时,关联必须是定向的,另一侧必须用@ContainedIn 注释。否则,Hibernate Search 无法在关联实体更新时更新根索引。
我假设 directional 这个词应该是 bi-directional 是对的吗?我的索引没有更新正是我的问题。我有单向关系,例如点单的人,但点单的人不认识。现在,当我更改顺序时,索引不会更新。
如果无法将关联更改为双向关联,那么我还必须使用 hibernate-search 的哪些可能性?是否可以创建两个单独的索引并合并查询?
Am I right to assume the word directional should be bi-directional?
是的。我会改正这个错字。
If changing the associations to become bi-directional is no option which possibilities would I have to still use 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
实体,例如每晚。
- 艰难的道路:每当
Order
发生变化时,重新索引受影响的 Person
实体。这基本上意味着向您的服务添加代码,以便每当订单为 created/updated/deleted 时,您 运行 查询以检索所有相应的人,并手动重新索引它们。
第一个解决方案相当简单,但有一个很大的缺点,即 Person
索引最多会过时 24 小时。根据您的用例,这可能是好的,也可能不是。
第二个解决方案容易出错,您基本上会做 Hibernate Search 的工作。
总而言之,您真的必须问问自己,将关联的反面添加到您的模型中是否会更好。
Would it be possible to create two separate indices and to combine queries?
从技术上讲,如果您使用的是 Lucene 集成(而不是 Elasticsearch 集成),那么可以。
但是:
- 您需要高于平均水平的 Lucene 知识。
- 您将不得不绕过 Hibernate Search API,并且需要编写代码来执行 Hibernate Search 通常执行的操作。
- 您将不得不使用实验性(阅读:不稳定)Lucene API。
- 我不确定它的性能如何,因为我从未尝试过。
因此,如果您不熟悉 Lucene 的 API,我不会推荐它。如果你真的想走那条路,这里有几点建议:
根据spec,当@IndexedEmbedded 指向实体时,关联必须是定向的,另一侧必须用@ContainedIn 注释。否则,Hibernate Search 无法在关联实体更新时更新根索引。
我假设 directional 这个词应该是 bi-directional 是对的吗?我的索引没有更新正是我的问题。我有单向关系,例如点单的人,但点单的人不认识。现在,当我更改顺序时,索引不会更新。
如果无法将关联更改为双向关联,那么我还必须使用 hibernate-search 的哪些可能性?是否可以创建两个单独的索引并合并查询?
Am I right to assume the word directional should be bi-directional?
是的。我会改正这个错字。
If changing the associations to become bi-directional is no option which possibilities would I have to still use 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
实体,例如每晚。 - 艰难的道路:每当
Order
发生变化时,重新索引受影响的Person
实体。这基本上意味着向您的服务添加代码,以便每当订单为 created/updated/deleted 时,您 运行 查询以检索所有相应的人,并手动重新索引它们。
第一个解决方案相当简单,但有一个很大的缺点,即 Person
索引最多会过时 24 小时。根据您的用例,这可能是好的,也可能不是。
第二个解决方案容易出错,您基本上会做 Hibernate Search 的工作。
总而言之,您真的必须问问自己,将关联的反面添加到您的模型中是否会更好。
Would it be possible to create two separate indices and to combine queries?
从技术上讲,如果您使用的是 Lucene 集成(而不是 Elasticsearch 集成),那么可以。
但是:
- 您需要高于平均水平的 Lucene 知识。
- 您将不得不绕过 Hibernate Search API,并且需要编写代码来执行 Hibernate Search 通常执行的操作。
- 您将不得不使用实验性(阅读:不稳定)Lucene API。
- 我不确定它的性能如何,因为我从未尝试过。
因此,如果您不熟悉 Lucene 的 API,我不会推荐它。如果你真的想走那条路,这里有几点建议: