如果我索引相同的数据,为什么lucene索引的大小会增加?

时间:2009-06-20 12:54:04

标签: hibernate search indexing lucene hibernate-search

我在我的应用程序中实现了Hibernate Search,即基于Lucene。每当我对数据库编制索引时,lucene索引的大小就会增加。但是,查询的结果每次都返回相同的结果。

如果我每次都索引相同的数据,为什么每次都会增加lucene的大小?

FullTextSession fullTextSession = Search.getFullTextSession(getSession());
    org.hibernate.Transaction tx = fullTextSession.beginTransaction();

    Criteria criteria = fullTextSession.createCriteria(getPersistentClass())
    .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
    .setCacheMode(CacheMode.IGNORE)
    .setFetchSize(pageSize)
    .setFlushMode(FlushMode.MANUAL);


    int i = 0;
    List<ProdAttrAssociationVO> results = null;
    do {
      criteria = criteria.setFirstResult(i)
        .setMaxResults(pageSize);
      results = criteria.list();

      for (ProdAttrAssociationVO entity : results) {
        fullTextSession.delete(entity);
        fullTextSession.index(entity);
      }

      // flush the index changes to disk so we don't hold until a commit
      if (i % batchSize == 0) {
        fullTextSession.flushToIndexes();
        fullTextSession.clear();
      }

      i += pageSize;
    } while (results.size() > 0);


    System.out.println("ProdAttrAssociation Indexing Completed");
    tx.commit();

1 个答案:

答案 0 :(得分:6)

我对Hibernate一无所知,但一般在Lucene中,删除的文档会保留在索引上,直到它被优化。这可以解释为什么你看到指数只会增长。

尝试在索引上运行optimize()。不确定你是如何从Hibernate中做到的(我看到它是SearchFactory上的方法)。

希望这有帮助。