Warum stieg die Größe des Lucene -Index, wenn ich die gleichen Daten indexiere?
-
06-07-2019 - |
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();
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