diff --git a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexManager.java b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexManager.java index 8ec7ba1fd1a..b88daf16d8f 100644 --- a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexManager.java +++ b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexManager.java @@ -8,13 +8,12 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; -import org.apache.lucene.analysis.Analyzer; -import org.apache.lucene.search.similarities.Similarity; import org.hibernate.search.backend.FlushLuceneWork; import org.hibernate.search.backend.IndexingMonitor; import org.hibernate.search.backend.LuceneWork; @@ -47,6 +46,9 @@ import org.hibernate.search.util.configuration.impl.ConfigurationParseHelper; import org.hibernate.search.util.logging.impl.LoggerFactory; +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.search.similarities.Similarity; + /** * An {@link IndexManager} applying indexing work to an Elasticsearch server. * @@ -387,14 +389,23 @@ public void performOperations(List workList, IndexingMonitor monitor @Override public void performStreamOperation(LuceneWork singleOperation, IndexingMonitor monitor, boolean forceAsync) { - if ( singleOperation == FlushLuceneWork.INSTANCE ) { + BackendRequest request = singleOperation.acceptIndexWorkVisitor( visitor, monitor ); + if ( singleOperation instanceof FlushLuceneWork ) { requestProcessor.awaitAsyncProcessingCompletion(); + executeBackendRequest( request, true ); } else { - BackendRequest request = singleOperation.acceptIndexWorkVisitor( visitor, monitor ); + executeBackendRequest( request, false ); + } + } - if ( request != null ) { - requestProcessor.executeAsync( request ); + private void executeBackendRequest(BackendRequest backendRequest, boolean sync) { + if ( backendRequest != null ) { + if ( sync ) { + requestProcessor.executeSync( Collections.>singletonList( backendRequest ) ); + } + else { + requestProcessor.executeAsync( backendRequest ); } } } diff --git a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexWorkVisitor.java b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexWorkVisitor.java index e16bb835e31..8ef218aa286 100644 --- a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexWorkVisitor.java +++ b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchIndexWorkVisitor.java @@ -10,6 +10,7 @@ import java.util.Locale; import java.util.Set; +import io.searchbox.indices.Flush; import org.apache.lucene.document.Document; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.index.DocValuesType; @@ -138,8 +139,18 @@ public BackendRequest visitUpdateWork(UpdateLuceneWork work, IndexingMonitor @Override public BackendRequest visitFlushWork(FlushLuceneWork work, IndexingMonitor monitor) { - // Nothing to do - return null; + Flush flush = new Flush.Builder().setParameter( "wait_if_ongoing", "true" ) + .addIndex( indexName ) + .refresh( true ) + .build(); + return new BackendRequest<>( + flush, + work, + indexName, + monitor, + NoopBackendRequestSuccessHandler.INSTANCE, + false + ); } @Override