Por que o tamanho do índice Lucene aumentou se eu indexar os mesmos dados?
-
06-07-2019 - |
Pergunta
Implementei a pesquisa de hibernato no meu aplicativo, ou seja, com base no Lucene. Sempre que indexa o banco de dados, o tamanho dos índices do Lucene aumenta. Mas, o resultado do retorno da consulta, o mesmo número de resultados todas as vezes.
Por que o tamanho do Lucene aumenta a cada vez se eu indexar os mesmos dados sempre?
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();
Solução
Não sei nada sobre o Hibernate, mas geralmente em Lucene, os documentos excluídos permanecem no índice até que seja otimizado. Isso poderia explicar por que você está vendo o índice apenas crescendo.
Tente executar otimize () no índice. Não tenho certeza de como você faz isso de Hibernate (vejo que é um método em SearchFactory).
Espero que isto ajude.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow