Spring 为什么Mass Indexer无法为多个实体生成索引?

Spring 为什么Mass Indexer无法为多个实体生成索引?,spring,indexing,lucene,hibernate-search,Spring,Indexing,Lucene,Hibernate Search,我正在使用Hibernate Lucene search从数据库中获取记录。以下是我的代码片段: fullTextSession.createIndexer().startAndWait(); 它工作正常,但正在为整个数据库生成索引。我认为这不是推荐的为整个数据库建立索引的方法。在google中搜索后,我发现MassIndexer是官方文档中的解决方案。以下是我的代码片段: fullTextSession.createIndexer(A.class,B.class).batchSizeT

我正在使用Hibernate Lucene search从数据库中获取记录。以下是我的代码片段:

   fullTextSession.createIndexer().startAndWait();
它工作正常,但正在为整个数据库生成索引。我认为这不是推荐的为整个数据库建立索引的方法。在google中搜索后,我发现
MassIndexer
是官方文档中的解决方案。以下是我的代码片段:

fullTextSession.createIndexer(A.class,B.class).batchSizeToLoadObjects(25).cacheMode(CacheMode.NORMAL)
.threadsToLoadObjects(5).typesToIndexInParallel(20).startAndWait();

在这里,我可以获取记录,但如果我传递更多的实体,如
C.class
D.class
,以及
A.class
B.class
,则无法为所有实体创建索引。相反,它只为两个无法获取某些记录的实体创建索引。因此,请给我推荐一些避免这个问题的建议。

让我澄清一些事情

以下代码:

   fullTextSession.createIndexer().startAndWait();
不是要重建整个数据库的索引,而是要重建所有已知索引实体的索引。 当然,如果要为所有实体编制索引,那么这意味着要重新为所有数据库编制索引,但通常应将需要编制索引的实体标记为
@index

实际调整类型的大小,例如

fullTextSession.createIndexer(A.class,B.class) [..]
这是个好主意,应该行得通

多病

如果类
C
D
是类型
A
和/或
B
的子类,则无需明确列出它们。要求索引任何类型也将索引其所有子类型


你提到“它不能”。你有什么错误吗?是否记录了任何警告?

Tq的回复:)。没有显示任何警告和错误。当我将更多实体显式添加到createIndexer(A.class、B.class、C.class、D.class)时,它不会生成任何输出。简单地说,它将找到0条记录。但是如果我在不使用createIndexer()传递任何实体的情况下执行相同的操作它提供了预期的输出。顺便说一句,A、B、C、D是父实体,它们之间没有关系。更重要的是,包含路径的重要性将提高性能??抱歉,我从未见过有人报告这样的问题。您能否澄清您正在使用的版本,并理想地创建一个能够重现此问题的测试?您可以在github中创建一个,这是一个很好的起点:或者打开一个JIRA并将一个项目附加到它。@Sanne.Problem已解决。我在mass indexer中没有做任何事情。我只是将我的关联更改为双向的,即added@ContainedIn在我的关系的另一边。在我的情况下,我不是每次都保存母公司实体,在大多数情况下,我都在保存其关联的child。我认为索引没有得到更新。我正确吗?这就是问题所在吗?@Sanne。这样做之后,我就能够获得我的记录。但是如果我进行插入,使用OneToMany和ManyToMany进行删除或更新。无法更新新创建的记录索引。最后,我没有找到问题所在。为此,我做了一件事。我为该记录手动创建了索引。Like Object obj=fullTextSession.get(A.class,id);fullTextSession.index(obj);现在我有记录了。假设我与MassIndexer一起手动执行索引,它们对性能有何影响??lucene.version=4.10.4 hibernate.version=4.3.11.Final