问题描述
我可以检查对象中的索引文件是否存在吗? 我可以开始在 Stratup 建立索引,但这需要太长时间。
另一个想法是检查文件夹是否已经存在。
有更好的解决方案吗?
1楼
我不太确定您在追求什么以及您的实际问题是什么,但让我尝试回答您的一些问题。
我可以检查对象中的索引文件是否存在吗?
Search 没有提供 API,但如果它是基于文件的索引,您可以检查索引是否存在于预期位置。 但是,您将无法判断它是否与数据库同步。
我可以开始在 Stratup 建立索引,但这需要太长时间。
如果您有现有数据,则需要构建初始索引。 一旦你建立了索引,你就可以依赖自动索引更新(当实体被创建/更新/删除时)或者你在给定的时间间隔手动重建它。 您是否需要使用手动方法重建完整索引取决于您是否有办法告诉哪些实体需要重新索引(例如,通过数据库中的最后更新列)。 最重要的是,您可以控制索引相对于数据库的最新程度。 这一切都取决于您的要求。
另一个想法是检查文件夹是否已经存在。
如上所述,所有这些检查都会告诉您索引是否存在。 不能(容易)以这种方式回答该索引是否是最新的。
有更好的解决方案吗?
为了什么?
2楼
您可以检查类的索引,如果没有找到任何结果,则在之后创建索引,例如:
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager.getEntityManagerFactory().createEntityManager());
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(Store.class)
.get();
org.apache.lucene.search.Query query = queryBuilder
.all()
.createQuery();
org.hibernate.search.jpa.FullTextQuery jpaQuery
= fullTextEntityManager.createFullTextQuery(query, Store.class);
int results = jpaQuery.getResultSize();
if (results == 0) {
try {
fullTextEntityManager.createIndexer().startAndWait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}