From d22b12874de7190851f7806428466932a4f90ca7 Mon Sep 17 00:00:00 2001 From: murali_ch Date: Thu, 20 Jun 2019 15:27:42 +0530 Subject: [PATCH] DATAES-594 Added support for index without refresh. Original PR: #286 --- .../repository/ElasticsearchRepository.java | 3 +++ .../AbstractElasticsearchRepository.java | 17 +++++++++++--- .../SimpleElasticsearchRepositoryTests.java | 22 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java b/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java index 7958891e0..41b233c36 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java @@ -27,10 +27,13 @@ import org.springframework.data.repository.NoRepositoryBean; * @author Rizwan Idrees * @author Mohsin Husen * @author Sascha Woo + * @author Murali Chevuri */ @NoRepositoryBean public interface ElasticsearchRepository extends ElasticsearchCrudRepository { + S indexWithoutRefresh(S entity); + S index(S entity); Iterable search(QueryBuilder query); diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java index e17fd8034..afc240162 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java @@ -56,9 +56,9 @@ import org.springframework.util.Assert; * @author Christoph Strobl * @author Michael Wirth * @author Sascha Woo + * @author Murali Chevuri */ -public abstract class AbstractElasticsearchRepository - implements ElasticsearchRepository { +public abstract class AbstractElasticsearchRepository implements ElasticsearchRepository { static final Logger LOGGER = LoggerFactory.getLogger(AbstractElasticsearchRepository.class); protected ElasticsearchOperations elasticsearchOperations; @@ -88,7 +88,7 @@ public abstract class AbstractElasticsearchRepository putMapping(); } } catch (ElasticsearchException exception) { - LOGGER.error("failed to load elasticsearch nodes : " + exception.getDetailedMessage()); + LOGGER.error("failed to load elasticsearch nodes : {}", exception.getDetailedMessage()); } } @@ -175,6 +175,17 @@ public abstract class AbstractElasticsearchRepository return save(entity); } + /** + * This method might lead to a temporary inconsistent state until + * {@link org.springframework.data.elasticsearch.repository.ElasticsearchRepository#refresh() refresh} is called. + */ + @Override + public S indexWithoutRefresh(S entity) { + Assert.notNull(entity, "Cannot save 'null' entity."); + elasticsearchOperations.index(createIndexQuery(entity)); + return entity; + } + @Override public Iterable saveAll(Iterable entities) { Assert.notNull(entities, "Cannot insert 'null' as a List."); diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/simple/SimpleElasticsearchRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/simple/SimpleElasticsearchRepositoryTests.java index d82550af0..58368ba9c 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/simple/SimpleElasticsearchRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/simple/SimpleElasticsearchRepositoryTests.java @@ -60,6 +60,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Christoph Strobl * @author Michael Wirth * @author Peter-Josef Meisch + * @author Murali Chevuri */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:/simple-repository-test.xml") @@ -569,6 +570,27 @@ public class SimpleElasticsearchRepositoryTests { assertThat(entities.getTotalElements()).isEqualTo(1L); } + @Test + public void shouldIndexWithoutRefreshEntity() { + + // given + String documentId = randomNumeric(5); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setVersion(System.currentTimeMillis()); + sampleEntity.setMessage("some message"); + + // when + repository.indexWithoutRefresh(sampleEntity); + + // then + Page entities = repository.search(termQuery("id", documentId), PageRequest.of(0, 50)); + assertThat(entities.getTotalElements()).isEqualTo(0L); + repository.refresh(); + entities = repository.search(termQuery("id", documentId), PageRequest.of(0, 50)); + assertThat(entities.getTotalElements()).isEqualTo(1L); + } + @Test public void shouldSortByGivenField() {