Hibernate 自动索引替代方案

Hibernate Automatic indexing alternative

我们有一个包含大约 130 个表的 Oracle 数据库。其中,只有两个表 用于全文搜索(即 cms 表)。使用 Hibernate/Lucene 注释.

正确配置了这些表

问题是每当对任何表进行 crud 操作时,Hibernate 都会对这两个 cms 表进行一些查询(我们认为这会减慢操作速度)。我们从休眠中知道这一点 documentation:

3.1.2. Automatic indexing

By default, every time an object is inserted, updated or deleted through Hibernate, Hibernate Search updates the according Lucene index....

我们也知道我们可以通过使用手动索引来避免这种情况 (Doc link)。但是我们不想手动使用索引(因为我们不想通过代码来做到这一点)。

我们喜欢自动索引,但我们需要以这样一种方式配置休眠,即仅当两个cms表中的任何一个是inserted/updated/deleted。有什么办法可以开箱即用吗?我认为这是一个非常有效的用例。

我们正在使用:

更新 21/01/2015 - 17:44 GMT

I have done some more testing and I can clearly see that the indexes are updated when a unrelated entity is updated/inserted. We are using a @ClassBridge (For extracting word/pdf etc) and I can see that the call is coming inside the ClassBridge implementation and calling the document.add(...). This is very weird!

作为文档的作者之一,对于措辞不明确深表歉意。

Hibernate Search 实际上会做的,只是加载它严格需要保持索引同步的数据,并且只加载那些被索引的实体。本节

updates the according Lucene index

应该建议,如果没有 "according" 需要更新的索引,则不会这样做。

因此它实际上会按照您的描述进行操作,甚至更智能:如果更新操作实际上影响了一个或多个索引属性,它只会更新索引。

例如,如果您的索引实体 "Person" 具有索引属性 "name" 和非索引属性 "email",它将对 "Person" 索引,当您更新 Person 实体以更新 "name" 时,但如果您仅更改 "email" 属性,它将跳过该操作。

如果您遇到性能问题,我建议您使用诊断工具来获取有关正在发生的事情的信息,而不是试图猜测。