我有一个@Indexed实体,我在其上执行Hibernate Search。我遵循以下步骤:
但是,只要我重新启动应用程序服务器。我无法搜索最近持久化的实体。我无法理解这里发生了什么。我认为我的lucene索引已经生成但没有持久化。
任何正确方向的帮助都会有很大的帮助。
答案 0 :(得分:1)
检查您是否正确配置了目录提供程序:
hibernate.search.default.directory_provider
应该根本不设置或设置为filesystem
。 local-heap
(以前为ram
)表示不会持久,并且在任何情况下都不应该用于制作,除非您真的知道自己在做什么。hibernate.search.default.indexBase
应设置为文件系统上目录的路径。我认为默认是当前的工作目录,如果你从两个不同的目录启动你的应用程序,就好像索引丢失一样。请参阅https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_configuration
答案 1 :(得分:0)
如果您有时间路径,则需要为实体重新索引。
这是SpringBoot的一个示例:
@Component
public class BuildSearchIndex
implements ApplicationListener<ApplicationReadyEvent> {
@PersistenceContext
private EntityManager entityManager;
/**
* Create an initial Lucene index for the data already present in the
* database.
* This method is called when Spring's startup.
*/
@Transactional
@Override
public void onApplicationEvent(final ApplicationReadyEvent event) {
try {
FullTextEntityManager fullTextEntityManager =
Search.getFullTextEntityManager(entityManager);
fullTextEntityManager.createIndexer().startAndWait();
} catch (InterruptedException e) {
System.out.println(
"An error occurred trying to build the serach index: " +
e.toString());
}
return;
}
}