Lucene索引不会持久存在于Hibernate Search中

时间:2017-10-04 08:48:58

标签: hibernate jpa lucene hibernate-search

我有一个@Indexed实体,我在其上执行Hibernate Search。我遵循以下步骤:

  1. 通过Hibernate保持实体。
  2. 使用Hibernate Search进行搜索。 (它有效)
  3. 但是,只要我重新启动应用程序服务器。我无法搜索最近持久化的实体。我无法理解这里发生了什么。我认为我的lucene索引已经生成但没有持久化。

    任何正确方向的帮助都会有很大的帮助。

2 个答案:

答案 0 :(得分:1)

检查您是否正确配置了目录提供程序:

  1. hibernate.search.default.directory_provider应该根本不设置或设置为filesystemlocal-heap(以前为ram)表示不会持久,并且在任何情况下都不应该用于制作,除非您真的知道自己在做什么。
  2. hibernate.search.default.indexBase应设置为文件系统上目录的路径。我认为默认是当前的工作目录,如果你从两个不同的目录启动你的应用程序,就好像索引丢失一样。
  3. 请参阅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;
    }


}