Question

J'ai implémenté Hibernate Search dans mon application basée sur Lucene. Chaque fois que j'indexe la base de données, la taille des index lucene augmente. Mais le résultat de la requête renvoie le même nombre de résultats à chaque fois.

Pourquoi la taille de lucene augmente chaque fois si j’indexe chaque fois les mêmes données?

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();
Était-ce utile?

La solution

Je ne connais rien à Hibernate, mais généralement, dans Lucene, les documents supprimés restent dans l'index jusqu'à ce qu'il soit optimisé. Cela pourrait expliquer pourquoi vous ne voyez que la croissance de l'indice.

Essayez d’exécuter optim () sur l’index. Vous ne savez pas comment vous le faites depuis Hibernate (je vois que c'est une méthode sur SearchFactory ).

J'espère que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top