Почему размер индекса lucene увеличился, если я индексирую те же данные?

Я реализовал 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();

person Shashi    schedule 20.06.2009    source источник


Ответы (1)


Я ничего не знаю о Hibernate, но обычно в Lucene удаленные документы остаются в индексе, пока он не будет оптимизирован. Это может объяснить, почему вы видите, что индекс только растет.

Попробуйте запустить optimize() для индекса. Не уверен, как вы это делаете из Hibernate (я вижу, что это метод на SearchFactory).

Надеюсь это поможет.

person itsadok    schedule 21.06.2009