diff --git a/spring-data-elasticsearch/.classpath b/spring-data-elasticsearch/.classpath
new file mode 100644
index 0000000000..6d7587a819
--- /dev/null
+++ b/spring-data-elasticsearch/.classpath
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-data-elasticsearch/.project b/spring-data-elasticsearch/.project
new file mode 100644
index 0000000000..09b9a781ed
--- /dev/null
+++ b/spring-data-elasticsearch/.project
@@ -0,0 +1,29 @@
+
+
+ spring-data-elasticsearch
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+ org.springframework.ide.eclipse.core.springbuilder
+
+
+
+
+
+ org.springframework.ide.eclipse.core.springnature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java
index 3857056b70..0fec9b2a66 100644
--- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java
+++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java
@@ -19,7 +19,7 @@ import java.nio.file.Paths;
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.baeldung.spring.data.es.repository")
-@ComponentScan(basePackages = {"com.baeldung.spring.data.es.service"})
+@ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" })
public class Config {
private static Logger logger = LoggerFactory.getLogger(Config.class);
@@ -29,17 +29,11 @@ public class Config {
try {
Path tmpDir = Files.createTempDirectory(Paths.get(System.getProperty("java.io.tmpdir")), "elasticsearch_data");
- ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder()
- .put("http.enabled", "false")
- .put("path.data", tmpDir.toAbsolutePath().toString());
+ ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder().put("http.enabled", "false").put("path.data", tmpDir.toAbsolutePath().toString());
logger.debug(tmpDir.toAbsolutePath().toString());
- return new NodeBuilder()
- .local(true)
- .settings(elasticsearchSettings.build())
- .node()
- .client();
+ return new NodeBuilder().local(true).settings(elasticsearchSettings.build()).node().client();
} catch (IOException ioex) {
logger.error("Cannot create temp dir", ioex);
throw new RuntimeException();
diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java
index 40db51ac13..3634324dd7 100644
--- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java
+++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java
@@ -16,12 +16,7 @@ public class Article {
@Id
private String id;
- @MultiField(
- mainField = @Field(type = String),
- otherFields = {
- @NestedField(index = not_analyzed, dotSuffix = "verbatim", type = String)
- }
- )
+ @MultiField(mainField = @Field(type = String), otherFields = { @NestedField(index = not_analyzed, dotSuffix = "verbatim", type = String) })
private String title;
@Field(type = Nested)
@@ -71,11 +66,6 @@ public class Article {
@Override
public String toString() {
- return "Article{" +
- "id='" + id + '\'' +
- ", title='" + title + '\'' +
- ", authors=" + authors +
- ", tags=" + Arrays.toString(tags) +
- '}';
+ return "Article{" + "id='" + id + '\'' + ", title='" + title + '\'' + ", authors=" + authors + ", tags=" + Arrays.toString(tags) + '}';
}
}
diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java
index c335c4534a..38f50e1614 100644
--- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java
+++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java
@@ -21,8 +21,6 @@ public class Author {
@Override
public String toString() {
- return "Author{" +
- "name='" + name + '\'' +
- '}';
+ return "Author{" + "name='" + name + '\'' + '}';
}
}
diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java
index 760bad4b01..b5a8fde633 100644
--- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java
+++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java
@@ -6,10 +6,16 @@ import org.springframework.data.domain.Pageable;
public interface ArticleService {
Article save(Article article);
+
Article findOne(String id);
+
Iterable findAll();
+
Page findByAuthorName(String name, Pageable pageable);
+
Page findByAuthorNameUsingCustomQuery(String name, Pageable pageable);
+
long count();
+
void delete(Article article);
}
diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java
index 3bb6e6a0e0..0ea922bdd3 100644
--- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java
+++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java
@@ -49,6 +49,6 @@ public class ArticleServiceImpl implements ArticleService {
@Override
public void delete(Article article) {
- articleRepository.delete(article);
+ articleRepository.delete(article);
}
}
diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java
index fbc18cbb4c..52695fcfd4 100644
--- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java
+++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java
@@ -40,7 +40,7 @@ import static org.elasticsearch.index.query.QueryBuilders.*;
import static org.junit.Assert.assertEquals;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = {Config.class}, loader = AnnotationConfigContextLoader.class)
+@ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class)
public class ElasticSearchQueryTest {
@Autowired
@@ -85,56 +85,40 @@ public class ElasticSearchQueryTest {
@Test
public void givenFullTitle_whenRunMatchQuery_thenDocIsFound() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "Search engines").operator(AND))
- .build();
- List articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build();
+ List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
}
@Test
public void givenOneTermFromTitle_whenRunMatchQuery_thenDocIsFound() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "Engines Solutions"))
- .build();
- List articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Engines Solutions")).build();
+ List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
assertEquals("Search engines", articles.get(0).getTitle());
}
@Test
public void givenPartTitle_whenRunMatchQuery_thenDocIsFound() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "elasticsearch data"))
- .build();
- List articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "elasticsearch data")).build();
+ List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(3, articles.size());
}
@Test
public void givenFullTitle_whenRunMatchQueryOnVerbatimField_thenDocIsFound() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title.verbatim", "Second Article About Elasticsearch"))
- .build();
- List articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title.verbatim", "Second Article About Elasticsearch")).build();
+ List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
- searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title.verbatim", "Second Article About"))
- .build();
- articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title.verbatim", "Second Article About")).build();
+ articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(0, articles.size());
}
@Test
public void givenNestedObject_whenQueryByAuthorsName_thenFoundArticlesByThatAuthor() {
- QueryBuilder builder = nestedQuery("authors",
- boolQuery().must(termQuery("authors.name", "smith")));
+ QueryBuilder builder = nestedQuery("authors", boolQuery().must(termQuery("authors.name", "smith")));
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
@@ -145,24 +129,20 @@ public class ElasticSearchQueryTest {
@Test
public void givenAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTokenCountsSeparately() {
TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("title");
- SearchResponse response = client.prepareSearch("blog").setTypes("article")
- .addAggregation(aggregation).execute().actionGet();
+ SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet();
Map results = response.getAggregations().asMap();
StringTerms topTags = (StringTerms) results.get("top_tags");
List keys = topTags.getBuckets().stream().map(b -> b.getKey()).collect(toList());
Collections.sort(keys);
- assertEquals(asList("about", "article", "data", "elasticsearch",
- "engines", "search", "second", "spring", "tutorial"), keys);
+ assertEquals(asList("about", "article", "data", "elasticsearch", "engines", "search", "second", "spring", "tutorial"), keys);
}
@Test
public void givenNotAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTermCountsIndividually() {
- TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("tags")
- .order(Terms.Order.aggregation("_count", false));
- SearchResponse response = client.prepareSearch("blog").setTypes("article")
- .addAggregation(aggregation).execute().actionGet();
+ TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("tags").order(Terms.Order.aggregation("_count", false));
+ SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet();
Map results = response.getAggregations().asMap();
StringTerms topTags = (StringTerms) results.get("top_tags");
@@ -173,39 +153,24 @@ public class ElasticSearchQueryTest {
@Test
public void givenNotExactPhrase_whenUseSlop_thenQueryMatches() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1))
- .build();
- List articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1)).build();
+ List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
}
@Test
public void givenPhraseWithType_whenUseFuzziness_thenQueryMatches() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "spring date elasticserch")
- .operator(AND)
- .fuzziness(Fuzziness.ONE)
- .prefixLength(3))
- .build();
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "spring date elasticserch").operator(AND).fuzziness(Fuzziness.ONE).prefixLength(3)).build();
- List articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
}
@Test
public void givenMultimatchQuery_whenDoSearch_thenAllProvidedFieldsMatch() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(multiMatchQuery("tutorial")
- .field("title")
- .field("tags")
- .type(MultiMatchQueryBuilder.Type.BEST_FIELDS))
- .build();
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(multiMatchQuery("tutorial").field("title").field("tags").type(MultiMatchQueryBuilder.Type.BEST_FIELDS)).build();
- List articles = elasticsearchTemplate
- .queryForList(searchQuery, Article.class);
+ List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(2, articles.size());
}
}
diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java
index 7b48772d3f..37af9c36fa 100644
--- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java
+++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java
@@ -27,7 +27,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = {Config.class}, loader = AnnotationConfigContextLoader.class)
+@ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class)
public class ElasticSearchTest {
@Autowired
@@ -59,8 +59,7 @@ public class ElasticSearchTest {
@Test
public void givenArticleService_whenSaveArticle_thenIdIsAssigned() {
- List authors = asList(
- new Author("John Smith"), johnDoe);
+ List authors = asList(new Author("John Smith"), johnDoe);
Article article = new Article("Making Search Elastic");
article.setAuthors(authors);
@@ -83,13 +82,10 @@ public class ElasticSearchTest {
assertEquals(3L, articleByAuthorName.getTotalElements());
}
-
@Test
public void givenPersistedArticles_whenUseRegexQuery_thenRightArticlesFound() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withFilter(regexpFilter("title", ".*data.*"))
- .build();
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withFilter(regexpFilter("title", ".*data.*")).build();
List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
@@ -97,9 +93,7 @@ public class ElasticSearchTest {
@Test
public void givenSavedDoc_whenTitleUpdated_thenCouldFindByUpdatedTitle() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(fuzzyQuery("title", "serch"))
- .build();
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fuzzyQuery("title", "serch")).build();
List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
@@ -117,9 +111,7 @@ public class ElasticSearchTest {
final String articleTitle = "Spring Data Elasticsearch";
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%"))
- .build();
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%")).build();
List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
final long count = articleService.count();
@@ -131,9 +123,7 @@ public class ElasticSearchTest {
@Test
public void givenSavedDoc_whenOneTermMatches_thenFindByTitle() {
- SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "Search engines").operator(AND))
- .build();
+ SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build();
List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
assertEquals(1, articles.size());
}