Yes. Use a custom strategy: https://docs.jboss.org/hibernate/search/6.0/reference/en-US/html_single/#_custom_strategy
Something like this should work:
package com.mycompany;
import ...;
public final class MyWriteSyncAutomaticIndexingSynchronizationStrategy
implements AutomaticIndexingSynchronizationStrategy {
public static final MyWriteSyncAutomaticIndexingSynchronizationStrategy INSTANCE = new MyWriteSyncAutomaticIndexingSynchronizationStrategy();
private MyWriteSyncAutomaticIndexingSynchronizationStrategy() {
}
@Override
public void apply(AutomaticIndexingSynchronizationConfigurationContext context) {
context.documentCommitStrategy( DocumentCommitStrategy.FORCE );
context.documentRefreshStrategy( DocumentRefreshStrategy.NONE );
FailureHandler failureHandler = context.failureHandler();
context.indexingFutureHandler( future -> {
// Wait for the result of indexing, so that we're sure changes were committed (or failed).
SearchIndexingPlanExecutionReport report = future.join();
report.throwable().ifPresent( t -> {
EntityIndexingFailureContext.Builder contextBuilder = EntityIndexingFailureContext.builder();
contextBuilder.throwable( throwable );
contextBuilder.failingOperation( "automatic indexing" );
for ( EntityReference entityReference : result.failingEntities() ) {
contextBuilder.entityReference( entityReference );
}
failureHandler.handle( contextBuilder.build() );
} );
} );
}
}
Make sure youâre using version 6.0.0.CR2.
Then set configuration property hibernate.search.automatic_indexing.synchronization.strategy
to constructor:com.mycompany.MyWriteSyncAutomaticIndexingSynchronizationStrategy
.