import org.hibernate.search.SearchFactory;
import org.hibernate.search.indexes.spi.DirectoryBasedIndexManager;
import org.hibernate.search.indexes.spi.IndexManager;
+import org.hibernate.search.spi.SearchIntegrator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.stereotype.Component;
protected <T extends CdmBase>void reindex(Class<T> type, IProgressMonitor monitor) {
+ //TODO set the application in maintenance mode: making
+ // queries to the index is not recommended when a MassIndexer is busy.
+ // fullTextSession.createIndexer().startAndWait();
+
FullTextSession fullTextSession = Search.getFullTextSession(getSession());
fullTextSession.setFlushMode(FlushMode.MANUAL);
return;
}
SearchFactory searchFactory = Search.getFullTextSession(getSession()).getSearchFactory();
- IndexManager indexManager = makeIndexManager(searchFactory, indexName);
+ IndexManager indexManager = obtainIndexManager(searchFactory, indexName);
IndexReader indexReader = searchFactory.getIndexReaderAccessor().open(type);
List<String> idFields = getIndexedDeclaredFields(type);
subMonitor.done();
}
- private IndexManager makeIndexManager(SearchFactory searchFactory, String indexName){
- //FIXME #4716 SearchFactoryImplementor not available in hibernate-search anymore
-// SearchFactoryImplementor searchFactory = (SearchFactoryImplementor)searchFactory;
-// IndexManager indexManager = searchFactory.getAllIndexesManager().getIndexManager(indexName);
-// return indexManager;
- return null;
+ private IndexManager obtainIndexManager(SearchFactory searchFactory, String indexName){
+ SearchIntegrator searchIntegrator = searchFactory.unwrap(SearchIntegrator.class );
+ IndexManager indexManager = searchIntegrator.getIndexManager(indexName);
+ return indexManager;
}
/**
if(doSpellIndex){
SearchFactory searchFactory = fullTextSession.getSearchFactory();
- IndexManager indexManager = makeIndexManager(searchFactory, type.getName());
+ IndexManager indexManager = obtainIndexManager(searchFactory, type.getName());
if(indexManager == null){
logger.info("No IndexManager found for " + type.getName() + ", thus nothing to purge");
return;
@SuppressWarnings("rawtypes")\r
@Test\r
@DataSet\r
- public final void testPurgeIndex() throws CorruptIndexException, IOException, ParseException {\r
+ public final void testPurgeAndReindex() throws CorruptIndexException, IOException, ParseException {\r
\r
refreshLuceneIndex();\r
\r
Pager<SearchResult<TaxonBase>> pager;\r
\r
- pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 7\r
+ pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 8\r
Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
\r
indexer.purge(null);\r
\r
pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 0\r
Assert.assertEquals("Expecting no entities since the index has been purged", 0, pager.getCount().intValue());\r
+\r
+ indexer.reindex(indexer.indexedClasses(), null);\r
+ commitAndStartNewTransaction(null);\r
+\r
+ pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 8\r
+ Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
}\r
\r
+\r
@SuppressWarnings("rawtypes")\r
@Test\r
@DataSet\r