检查索引是否存在(Hibernate Search)

时间:2015-07-23 12:13:40

标签: java hibernate indexing full-text-search hibernate-search

我可以检查对象的索引文件是否存在吗? 我可以在stratup开始索引,但这需要太长时间。

另一个想法是检查文件夹是否已存在。

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

我不太确定你的目标是什么以及你的实际问题是什么,但让我试着回答你的一些问题。

  

我可以检查对象中的索引文件是否存在?

搜索提供的API没有API,但如果它是基于文件的索引,您可以检查索引是否存在于预期位置。但是,您无法判断它是否与数据库同步。

  

我可以在stratup开始索引,但这需要太长时间。

如果您有现有数据,则需要构建初始索引。一旦建立了索引,就可以依靠自动索引更新(创建/更新/删除实体时)或者在给定的时间间隔手动重建它。是否需要使用手动方法重建完整索引取决于您是否有办法告知哪些实体需要重新编制索引(例如,通过数据库中的最后一个更新列)。最重要的是,您可以控制索引与数据库的关系。这一切都取决于您的要求。

  

另一个想法是检查文件夹是否已存在。

如上所述,所有这些检查都会告诉您索引是否存在。无论这个指数是否是最新的,都不能(轻松)以这种方式回答。

  

有更好的解决方案吗?

为了什么?

答案 1 :(得分:0)

您可以检查类的索引,如果找不到任何结果,请稍后创建索引,例如:

    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();
        }
    }