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

StackOverflow https://stackoverflow.com/questions/1021554

Вопрос

Я реализовал Hibernate Search в своем приложении, т.е. на основе 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();
Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top