Domanda

Ho implementato Hibernate Search nella mia applicazione, cioè basato su Lucene. Ogni volta che indicizzo il database, aumenta la dimensione degli indici lucene. Tuttavia, il risultato della query restituisce sempre lo stesso numero di risultati.

Perché la dimensione di lucene aumenta ogni volta se indicizzo sempre gli stessi dati?

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();
È stato utile?

Soluzione

Non so nulla di Hibernate, ma generalmente in Lucene, i documenti eliminati rimangono nell'indice fino a quando non viene ottimizzato. Questo potrebbe spiegare perché stai vedendo crescere solo l'indice.

Prova a eseguire optimize () sull'indice. Non sono sicuro di come lo fai da Hibernate (vedo che è un metodo su SearchFactory ).

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top