Frage

Ich habe die Hibernate -Suche in meiner Anwendung implementiert, dh basierend auf Lucene. Immer wenn ich die Datenbank indiziere, steigt die Größe der Lucene -Indizes an. Das Ergebnis der Abfrage gibt jedoch jedes Mal die gleiche No von Ergebnissen zurück.

Warum steigt die Größe von Lucene jedes Mal an, wenn ich jedes Mal die gleichen Daten indexiere?

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();
War es hilfreich?

Lösung

Ich weiß nichts über Hibernate, aber im Allgemeinen in Lucene bleiben gelöschte Dokumente im Index, bis er optimiert ist. Das könnte erklären, warum Sie den Index nur wachsen sehen.

Versuchen Sie, optimize () im Index auszuführen. Ich bin mir nicht sicher, wie Sie es von Hibernate machen (ich sehe, es ist eine Methode auf SearchFactory).

Hoffe das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top