diff --git a/persistence-modules/spring-data-elasticsearch/pom.xml b/persistence-modules/spring-data-elasticsearch/pom.xml
index 3446528323..6a983145ee 100644
--- a/persistence-modules/spring-data-elasticsearch/pom.xml
+++ b/persistence-modules/spring-data-elasticsearch/pom.xml
@@ -15,13 +15,7 @@
org.springframework
- spring-core
- ${spring.version}
-
-
-
- org.springframework
- spring-context
+ spring-web
${spring.version}
@@ -36,6 +30,7 @@
elasticsearch
${elasticsearch.version}
+
com.alibaba
fastjson
@@ -49,8 +44,8 @@
- com.vividsolutions
- jts
+ org.locationtech.jts
+ jts-core
${jts.version}
@@ -60,41 +55,19 @@
-
- org.apache.logging.log4j
- log4j-core
- ${log4j.version}
-
-
-
- org.elasticsearch.client
- transport
- ${elasticsearch.version}
-
-
org.springframework
spring-test
${spring.version}
test
-
-
- net.java.dev.jna
- jna
- ${jna.version}
- test
-
- 3.0.8.RELEASE
- 4.5.2
- 5.6.0
+ 4.0.0.RELEASE
+ 7.6.2
1.2.47
- 0.6
- 1.13
- 2.9.1
+ 0.7
+ 1.15.0
-
\ No newline at end of file
diff --git a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java b/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java
index e6ce795b45..51bbe73e9e 100644
--- a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java
+++ b/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java
@@ -1,19 +1,13 @@
package com.baeldung.spring.data.es.config;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-import org.elasticsearch.client.Client;
-import org.elasticsearch.client.transport.TransportClient;
-import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.common.transport.InetSocketTransportAddress;
-import org.elasticsearch.transport.client.PreBuiltTransportClient;
-import org.springframework.beans.factory.annotation.Value;
+import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import org.springframework.data.elasticsearch.client.ClientConfiguration;
+import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
-import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
@Configuration
@@ -21,30 +15,18 @@ import org.springframework.data.elasticsearch.repository.config.EnableElasticsea
@ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" })
public class Config {
- @Value("${elasticsearch.home:/usr/local/Cellar/elasticsearch/5.6.0}")
- private String elasticsearchHome;
-
- @Value("${elasticsearch.cluster.name:elasticsearch}")
- private String clusterName;
-
@Bean
- public Client client() {
- TransportClient client = null;
- try {
- final Settings elasticsearchSettings = Settings.builder()
- .put("client.transport.sniff", true)
- .put("path.home", elasticsearchHome)
- .put("cluster.name", clusterName).build();
- client = new PreBuiltTransportClient(elasticsearchSettings);
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
- } catch (UnknownHostException e) {
- e.printStackTrace();
- }
- return client;
+ RestHighLevelClient client() {
+ ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+ .connectedTo("localhost:9200")
+ .build();
+
+ return RestClients.create(clientConfiguration)
+ .rest();
}
@Bean
public ElasticsearchOperations elasticsearchTemplate() {
- return new ElasticsearchTemplate(client());
+ return new ElasticsearchRestTemplate(client());
}
}
diff --git a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java b/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java
index 38f50e1614..1d596cd92b 100644
--- a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java
+++ b/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java
@@ -1,7 +1,12 @@
package com.baeldung.spring.data.es.model;
+import static org.springframework.data.elasticsearch.annotations.FieldType.Text;
+
+import org.springframework.data.elasticsearch.annotations.Field;
+
public class Author {
+ @Field(type = Text)
private String name;
public Author() {
diff --git a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java b/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java
deleted file mode 100644
index a0f72aa5f7..0000000000
--- a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.baeldung.spring.data.es.service;
-
-import java.util.Optional;
-
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-
-import com.baeldung.spring.data.es.model.Article;
-
-public interface ArticleService {
- Article save(Article article);
-
- Optional findOne(String id);
-
- Iterable findAll();
-
- Page findByAuthorName(String name, Pageable pageable);
-
- Page findByAuthorNameUsingCustomQuery(String name, Pageable pageable);
-
- Page findByFilteredTagQuery(String tag, Pageable pageable);
-
- Page findByAuthorsNameAndFilteredTagQuery(String name, String tag, Pageable pageable);
-
- long count();
-
- void delete(Article article);
-}
diff --git a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java b/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java
deleted file mode 100644
index 5064f16508..0000000000
--- a/persistence-modules/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.baeldung.spring.data.es.service;
-
-import java.util.Optional;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.stereotype.Service;
-
-import com.baeldung.spring.data.es.model.Article;
-import com.baeldung.spring.data.es.repository.ArticleRepository;
-
-@Service
-public class ArticleServiceImpl implements ArticleService {
-
- private final ArticleRepository articleRepository;
-
- @Autowired
- public ArticleServiceImpl(ArticleRepository articleRepository) {
- this.articleRepository = articleRepository;
- }
-
- @Override
- public Article save(Article article) {
- return articleRepository.save(article);
- }
-
- @Override
- public Optional findOne(String id) {
- return articleRepository.findById(id);
- }
-
- @Override
- public Iterable findAll() {
- return articleRepository.findAll();
- }
-
- @Override
- public Page findByAuthorName(String name, Pageable pageable) {
- return articleRepository.findByAuthorsName(name, pageable);
- }
-
- @Override
- public Page findByAuthorNameUsingCustomQuery(String name, Pageable pageable) {
- return articleRepository.findByAuthorsNameUsingCustomQuery(name, pageable);
- }
-
- @Override
- public Page findByFilteredTagQuery(String tag, Pageable pageable) {
- return articleRepository.findByFilteredTagQuery(tag, pageable);
- }
-
- @Override
- public Page findByAuthorsNameAndFilteredTagQuery(String name, String tag, Pageable pageable) {
- return articleRepository.findByAuthorsNameAndFilteredTagQuery(name, tag, pageable);
- }
-
- @Override
- public long count() {
- return articleRepository.count();
- }
-
- @Override
- public void delete(Article article) {
- articleRepository.delete(article);
- }
-}
diff --git a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java
index c69deeb77c..6572896eca 100644
--- a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java
+++ b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java
@@ -8,10 +8,10 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.baeldung.spring.data.es.config.Config;
/**
+ * This Manual test requires: Elasticsearch instance running on localhost:9200.
*
- * This Manual test requires:
- * * Elasticsearch instance running on host
- *
+ * The following docker command can be used: docker run -d --name es762 -p
+ * 9200:9200 -e "discovery.type=single-node" elasticsearch:7.6.2
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
diff --git a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchManualTest.java b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchManualTest.java
index e43dcdf43e..2ca5f28f13 100644
--- a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchManualTest.java
+++ b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchManualTest.java
@@ -3,43 +3,48 @@ package com.baeldung.elasticsearch;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
-import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.alibaba.fastjson.JSON;
import org.elasticsearch.action.DocWriteResponse.Result;
+import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
+import org.elasticsearch.action.get.GetRequest;
+import org.elasticsearch.action.get.GetResponse;
+import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
-import org.elasticsearch.client.Client;
-import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.common.transport.InetSocketTransportAddress;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.transport.client.PreBuiltTransportClient;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Before;
import org.junit.Test;
-
-import com.alibaba.fastjson.JSON;
+import org.springframework.data.elasticsearch.client.ClientConfiguration;
+import org.springframework.data.elasticsearch.client.RestClients;
/**
+ * This Manual test requires: Elasticsearch instance running on localhost:9200.
*
- * This Manual test requires:
- * * Elasticsearch instance running on host
- * * with cluster name = elasticsearch
- *
+ * The following docker command can be used: docker run -d --name es762 -p
+ * 9200:9200 -e "discovery.type=single-node" elasticsearch:7.6.2
*/
public class ElasticSearchManualTest {
private List listOfPersons = new ArrayList<>();
- private Client client = null;
+ private RestHighLevelClient client = null;
@Before
public void setUp() throws UnknownHostException {
@@ -47,115 +52,122 @@ public class ElasticSearchManualTest {
Person person2 = new Person(25, "Janette Doe", new Date());
listOfPersons.add(person1);
listOfPersons.add(person2);
-
- client = new PreBuiltTransportClient(Settings.builder().put("client.transport.sniff", true)
- .put("cluster.name","elasticsearch").build())
- .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
+
+ ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+ .connectedTo("localhost:9200")
+ .build();
+ client = RestClients.create(clientConfiguration)
+ .rest();
}
@Test
- public void givenJsonString_whenJavaObject_thenIndexDocument() {
+ public void givenJsonString_whenJavaObject_thenIndexDocument() throws Exception {
String jsonObject = "{\"age\":20,\"dateOfBirth\":1471466076564,\"fullName\":\"John Doe\"}";
- IndexResponse response = client
- .prepareIndex("people", "Doe")
- .setSource(jsonObject, XContentType.JSON)
- .get();
+ IndexRequest request = new IndexRequest("people");
+ request.source(jsonObject, XContentType.JSON);
+
+ IndexResponse response = client.index(request, RequestOptions.DEFAULT);
String index = response.getIndex();
- String type = response.getType();
+ long version = response.getVersion();
assertEquals(Result.CREATED, response.getResult());
- assertEquals(index, "people");
- assertEquals(type, "Doe");
+ assertEquals(1, version);
+ assertEquals("people", index);
}
@Test
- public void givenDocumentId_whenJavaObject_thenDeleteDocument() {
+ public void givenDocumentId_whenJavaObject_thenDeleteDocument() throws Exception {
String jsonObject = "{\"age\":10,\"dateOfBirth\":1471455886564,\"fullName\":\"Johan Doe\"}";
- IndexResponse response = client
- .prepareIndex("people", "Doe")
- .setSource(jsonObject, XContentType.JSON)
- .get();
+ IndexRequest indexRequest = new IndexRequest("people");
+ indexRequest.source(jsonObject, XContentType.JSON);
+
+ IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
String id = response.getId();
- DeleteResponse deleteResponse = client
- .prepareDelete("people", "Doe", id)
- .get();
- assertEquals(Result.DELETED,deleteResponse.getResult());
+ GetRequest getRequest = new GetRequest("people");
+ getRequest.id(id);
+
+ GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
+ System.out.println(getResponse.getSourceAsString());
+
+ DeleteRequest deleteRequest = new DeleteRequest("people");
+ deleteRequest.id(id);
+
+ DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
+
+ assertEquals(Result.DELETED, deleteResponse.getResult());
}
@Test
- public void givenSearchRequest_whenMatchAll_thenReturnAllResults() {
- SearchResponse response = client
- .prepareSearch()
- .execute()
- .actionGet();
- SearchHit[] searchHits = response
- .getHits()
- .getHits();
+ public void givenSearchRequest_whenMatchAll_thenReturnAllResults() throws Exception {
+ SearchRequest searchRequest = new SearchRequest();
+ SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
+ SearchHit[] searchHits = response.getHits()
+ .getHits();
List results = Arrays.stream(searchHits)
- .map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
- .collect(Collectors.toList());
+ .map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
+ .collect(Collectors.toList());
+
+ results.forEach(System.out::println);
}
@Test
- public void givenSearchParameters_thenReturnResults() {
- SearchResponse response = client
- .prepareSearch()
- .setTypes()
- .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
- .setPostFilter(QueryBuilders
- .rangeQuery("age")
+ public void givenSearchParameters_thenReturnResults() throws Exception {
+ SearchSourceBuilder builder = new SearchSourceBuilder().postFilter(QueryBuilders.rangeQuery("age")
.from(5)
- .to(15))
- .setFrom(0)
- .setSize(60)
- .setExplain(true)
- .execute()
- .actionGet();
+ .to(15));
- SearchResponse response2 = client
- .prepareSearch()
- .setTypes()
- .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
- .setPostFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette"))
- .setFrom(0)
- .setSize(60)
- .setExplain(true)
- .execute()
- .actionGet();
+ SearchRequest searchRequest = new SearchRequest();
+ searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
+ searchRequest.source(builder);
+
+ SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
+
+ builder = new SearchSourceBuilder().postFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette"));
+
+ searchRequest = new SearchRequest();
+ searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
+ searchRequest.source(builder);
+
+ SearchResponse response2 = client.search(searchRequest, RequestOptions.DEFAULT);
+
+ builder = new SearchSourceBuilder().postFilter(QueryBuilders.matchQuery("John", "Name*"));
+ searchRequest = new SearchRequest();
+ searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
+ searchRequest.source(builder);
+
+ SearchResponse response3 = client.search(searchRequest, RequestOptions.DEFAULT);
- SearchResponse response3 = client
- .prepareSearch()
- .setTypes()
- .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
- .setPostFilter(QueryBuilders.matchQuery("John", "Name*"))
- .setFrom(0)
- .setSize(60)
- .setExplain(true)
- .execute()
- .actionGet();
response2.getHits();
response3.getHits();
- final List results = Arrays.stream(response.getHits().getHits())
- .map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
- .collect(Collectors.toList());
+ final List results = Stream.of(response.getHits()
+ .getHits(),
+ response2.getHits()
+ .getHits(),
+ response3.getHits()
+ .getHits())
+ .flatMap(Arrays::stream)
+ .map(hit -> JSON.parseObject(hit.getSourceAsString(), Person.class))
+ .collect(Collectors.toList());
+
+ results.forEach(System.out::println);
}
@Test
public void givenContentBuilder_whenHelpers_thanIndexJson() throws IOException {
- XContentBuilder builder = XContentFactory
- .jsonBuilder()
- .startObject()
- .field("fullName", "Test")
- .field("salary", "11500")
- .field("age", "10")
- .endObject();
- IndexResponse response = client
- .prepareIndex("people", "Doe")
- .setSource(builder)
- .get();
+ XContentBuilder builder = XContentFactory.jsonBuilder()
+ .startObject()
+ .field("fullName", "Test")
+ .field("salary", "11500")
+ .field("age", "10")
+ .endObject();
- assertEquals(Result.CREATED, response.getResult());
+ IndexRequest indexRequest = new IndexRequest("people");
+ indexRequest.source(builder);
+
+ IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
+
+ assertEquals(Result.CREATED, response.getResult());
}
}
diff --git a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/GeoQueriesManualTest.java b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/GeoQueriesManualTest.java
index f9a42050b6..64b2ea2437 100644
--- a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/GeoQueriesManualTest.java
+++ b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/GeoQueriesManualTest.java
@@ -1,4 +1,5 @@
package com.baeldung.elasticsearch;
+
import static org.junit.Assert.assertTrue;
import java.io.IOException;
@@ -7,162 +8,169 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
+import com.baeldung.spring.data.es.config.Config;
+
+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
+import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
+import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.client.Client;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.geo.ShapeRelation;
-import org.elasticsearch.common.geo.builders.ShapeBuilders;
+import org.elasticsearch.common.geo.builders.EnvelopeBuilder;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentType;
+import org.elasticsearch.index.query.GeoShapeQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.locationtech.jts.geom.Coordinate;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import com.baeldung.spring.data.es.config.Config;
-import com.vividsolutions.jts.geom.Coordinate;
-
/**
+ * This Manual test requires: Elasticsearch instance running on localhost:9200.
*
- * This Manual test requires:
- * * Elasticsearch instance running on host
- * * with cluster name = elasticsearch
- * * and further configurations
- *
+ * The following docker command can be used: docker run -d --name es762 -p
+ * 9200:9200 -e "discovery.type=single-node" elasticsearch:7.6.2
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class GeoQueriesManualTest {
private static final String WONDERS_OF_WORLD = "wonders-of-world";
- private static final String WONDERS = "Wonders";
@Autowired
- private ElasticsearchTemplate elasticsearchTemplate;
-
- @Autowired
- private Client client;
+ private RestHighLevelClient client;
@Before
- public void setUp() {
- String jsonObject = "{\"Wonders\":{\"properties\":{\"name\":{\"type\":\"string\",\"index\":\"not_analyzed\"},\"region\":{\"type\":\"geo_shape\",\"tree\":\"quadtree\",\"precision\":\"1m\"},\"location\":{\"type\":\"geo_point\"}}}}";
+ public void setUp() throws Exception {
+ String jsonObject = "{\"properties\":{\"name\":{\"type\":\"text\",\"index\":false},\"region\":{\"type\":\"geo_shape\"},\"location\":{\"type\":\"geo_point\"}}}";
+
CreateIndexRequest req = new CreateIndexRequest(WONDERS_OF_WORLD);
- req.mapping(WONDERS, jsonObject, XContentType.JSON);
- client.admin()
- .indices()
- .create(req)
- .actionGet();
+ req.mapping(jsonObject, XContentType.JSON);
+
+ client.indices()
+ .create(req, RequestOptions.DEFAULT);
}
@Test
- public void givenGeoShapeData_whenExecutedGeoShapeQuery_thenResultNonEmpty() throws IOException{
+ public void givenGeoShapeData_whenExecutedGeoShapeQuery_thenResultNonEmpty() throws IOException {
String jsonObject = "{\"name\":\"Agra\",\"region\":{\"type\":\"envelope\",\"coordinates\":[[75,30.2],[80.1, 25]]}}";
- IndexResponse response = client.prepareIndex(WONDERS_OF_WORLD, WONDERS)
- .setSource(jsonObject, XContentType.JSON)
- .get();
-
+ IndexRequest indexRequest = new IndexRequest(WONDERS_OF_WORLD);
+ indexRequest.source(jsonObject, XContentType.JSON);
+ IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
+
String tajMahalId = response.getId();
- client.admin()
- .indices()
- .prepareRefresh(WONDERS_OF_WORLD)
- .get();
- Coordinate topLeft =new Coordinate(74, 31.2);
- Coordinate bottomRight =new Coordinate(81.1, 24);
- QueryBuilder qb = QueryBuilders
- .geoShapeQuery("region", ShapeBuilders.newEnvelope(topLeft, bottomRight))
- .relation(ShapeRelation.WITHIN);
+ RefreshRequest refreshRequest = new RefreshRequest(WONDERS_OF_WORLD);
+ client.indices()
+ .refresh(refreshRequest, RequestOptions.DEFAULT);
+ Coordinate topLeft = new Coordinate(74, 31.2);
+ Coordinate bottomRight = new Coordinate(81.1, 24);
- SearchResponse searchResponse = client.prepareSearch(WONDERS_OF_WORLD)
- .setTypes(WONDERS)
- .setQuery(qb)
- .execute()
- .actionGet();
+ GeoShapeQueryBuilder qb = QueryBuilders.geoShapeQuery("region", new EnvelopeBuilder(topLeft, bottomRight).buildGeometry());
+ qb.relation(ShapeRelation.INTERSECTS);
+
+ SearchSourceBuilder source = new SearchSourceBuilder().query(qb);
+ SearchRequest searchRequest = new SearchRequest(WONDERS_OF_WORLD);
+ searchRequest.source(source);
+
+ SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
List ids = Arrays.stream(searchResponse.getHits()
- .getHits())
- .map(SearchHit::getId)
- .collect(Collectors.toList());
+ .getHits())
+ .map(SearchHit::getId)
+ .collect(Collectors.toList());
assertTrue(ids.contains(tajMahalId));
}
@Test
- public void givenGeoPointData_whenExecutedGeoBoundingBoxQuery_thenResultNonEmpty() {
+ public void givenGeoPointData_whenExecutedGeoBoundingBoxQuery_thenResultNonEmpty() throws Exception {
String jsonObject = "{\"name\":\"Pyramids of Giza\",\"location\":[31.131302,29.976480]}";
- IndexResponse response = client.prepareIndex(WONDERS_OF_WORLD, WONDERS)
- .setSource(jsonObject, XContentType.JSON)
- .get();
+
+ IndexRequest indexRequest = new IndexRequest(WONDERS_OF_WORLD);
+ indexRequest.source(jsonObject, XContentType.JSON);
+ IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
+
String pyramidsOfGizaId = response.getId();
- client.admin()
- .indices()
- .prepareRefresh(WONDERS_OF_WORLD)
- .get();
+
+ RefreshRequest refreshRequest = new RefreshRequest(WONDERS_OF_WORLD);
+ client.indices()
+ .refresh(refreshRequest, RequestOptions.DEFAULT);
QueryBuilder qb = QueryBuilders.geoBoundingBoxQuery("location")
- .setCorners(31,30,28,32);
-
- SearchResponse searchResponse = client.prepareSearch(WONDERS_OF_WORLD)
- .setTypes(WONDERS)
- .setQuery(qb)
- .execute()
- .actionGet();
+ .setCorners(31, 30, 28, 32);
+
+ SearchSourceBuilder source = new SearchSourceBuilder().query(qb);
+ SearchRequest searchRequest = new SearchRequest(WONDERS_OF_WORLD);
+ searchRequest.source(source);
+
+ SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
+
List ids = Arrays.stream(searchResponse.getHits()
- .getHits())
- .map(SearchHit::getId)
- .collect(Collectors.toList());
+ .getHits())
+ .map(SearchHit::getId)
+ .collect(Collectors.toList());
assertTrue(ids.contains(pyramidsOfGizaId));
}
@Test
- public void givenGeoPointData_whenExecutedGeoDistanceQuery_thenResultNonEmpty() {
+ public void givenGeoPointData_whenExecutedGeoDistanceQuery_thenResultNonEmpty() throws Exception {
String jsonObject = "{\"name\":\"Lighthouse of alexandria\",\"location\":[31.131302,29.976480]}";
- IndexResponse response = client.prepareIndex(WONDERS_OF_WORLD, WONDERS)
- .setSource(jsonObject, XContentType.JSON)
- .get();
+
+ IndexRequest indexRequest = new IndexRequest(WONDERS_OF_WORLD);
+ indexRequest.source(jsonObject, XContentType.JSON);
+ IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
+
String lighthouseOfAlexandriaId = response.getId();
- client.admin()
- .indices()
- .prepareRefresh(WONDERS_OF_WORLD)
- .get();
+
+ RefreshRequest refreshRequest = new RefreshRequest(WONDERS_OF_WORLD);
+ client.indices()
+ .refresh(refreshRequest, RequestOptions.DEFAULT);
QueryBuilder qb = QueryBuilders.geoDistanceQuery("location")
- .point(29.976, 31.131)
- .distance(10, DistanceUnit.MILES);
+ .point(29.976, 31.131)
+ .distance(10, DistanceUnit.MILES);
+
+ SearchSourceBuilder source = new SearchSourceBuilder().query(qb);
+ SearchRequest searchRequest = new SearchRequest(WONDERS_OF_WORLD);
+ searchRequest.source(source);
+
+ SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
- SearchResponse searchResponse = client.prepareSearch(WONDERS_OF_WORLD)
- .setTypes(WONDERS)
- .setQuery(qb)
- .execute()
- .actionGet();
List ids = Arrays.stream(searchResponse.getHits()
- .getHits())
- .map(SearchHit::getId)
- .collect(Collectors.toList());
+ .getHits())
+ .map(SearchHit::getId)
+ .collect(Collectors.toList());
assertTrue(ids.contains(lighthouseOfAlexandriaId));
}
@Test
- public void givenGeoPointData_whenExecutedGeoPolygonQuery_thenResultNonEmpty() {
+ public void givenGeoPointData_whenExecutedGeoPolygonQuery_thenResultNonEmpty() throws Exception {
String jsonObject = "{\"name\":\"The Great Rann of Kutch\",\"location\":[69.859741,23.733732]}";
- IndexResponse response = client.prepareIndex(WONDERS_OF_WORLD, WONDERS)
- .setSource(jsonObject, XContentType.JSON)
- .get();
+
+ IndexRequest indexRequest = new IndexRequest(WONDERS_OF_WORLD);
+ indexRequest.source(jsonObject, XContentType.JSON);
+ IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
+
String greatRannOfKutchid = response.getId();
- client.admin()
- .indices()
- .prepareRefresh(WONDERS_OF_WORLD)
- .get();
+
+ RefreshRequest refreshRequest = new RefreshRequest(WONDERS_OF_WORLD);
+ client.indices()
+ .refresh(refreshRequest, RequestOptions.DEFAULT);
List allPoints = new ArrayList();
allPoints.add(new GeoPoint(22.733, 68.859));
@@ -170,20 +178,23 @@ public class GeoQueriesManualTest {
allPoints.add(new GeoPoint(23, 70.859));
QueryBuilder qb = QueryBuilders.geoPolygonQuery("location", allPoints);
- SearchResponse searchResponse = client.prepareSearch(WONDERS_OF_WORLD)
- .setTypes(WONDERS)
- .setQuery(qb)
- .execute()
- .actionGet();
+ SearchSourceBuilder source = new SearchSourceBuilder().query(qb);
+ SearchRequest searchRequest = new SearchRequest(WONDERS_OF_WORLD);
+ searchRequest.source(source);
+
+ SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
+
List ids = Arrays.stream(searchResponse.getHits()
- .getHits())
- .map(SearchHit::getId)
- .collect(Collectors.toList());
+ .getHits())
+ .map(SearchHit::getId)
+ .collect(Collectors.toList());
assertTrue(ids.contains(greatRannOfKutchid));
}
@After
- public void destroy() {
- elasticsearchTemplate.deleteIndex(WONDERS_OF_WORLD);
+ public void destroy() throws Exception {
+ DeleteIndexRequest deleteIndex = new DeleteIndexRequest(WONDERS_OF_WORLD);
+ client.indices()
+ .delete(deleteIndex, RequestOptions.DEFAULT);
}
}
diff --git a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchManualTest.java b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchManualTest.java
index bed2e2ff25..412cd04e09 100644
--- a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchManualTest.java
+++ b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchManualTest.java
@@ -10,68 +10,71 @@ import static org.junit.Assert.assertNotNull;
import java.util.List;
+import com.baeldung.spring.data.es.config.Config;
+import com.baeldung.spring.data.es.model.Article;
+import com.baeldung.spring.data.es.model.Author;
+import com.baeldung.spring.data.es.repository.ArticleRepository;
+
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
-import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
+import org.springframework.data.elasticsearch.core.SearchHits;
+import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
-import org.springframework.data.elasticsearch.core.query.SearchQuery;
+import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import com.baeldung.spring.data.es.config.Config;
-import com.baeldung.spring.data.es.model.Article;
-import com.baeldung.spring.data.es.model.Author;
-import com.baeldung.spring.data.es.service.ArticleService;
-
/**
+ * This Manual test requires: Elasticsearch instance running on localhost:9200.
*
- * This Manual test requires:
- * * Elasticsearch instance running on host
- * * with cluster name = elasticsearch
- *
+ * The following docker command can be used: docker run -d --name es762 -p
+ * 9200:9200 -e "discovery.type=single-node" elasticsearch:7.6.2
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class ElasticSearchManualTest {
@Autowired
- private ElasticsearchTemplate elasticsearchTemplate;
+ private ElasticsearchRestTemplate elasticsearchTemplate;
@Autowired
- private ArticleService articleService;
+ private ArticleRepository articleRepository;
private final Author johnSmith = new Author("John Smith");
private final Author johnDoe = new Author("John Doe");
@Before
public void before() {
- elasticsearchTemplate.deleteIndex(Article.class);
- elasticsearchTemplate.createIndex(Article.class);
- // don't call putMapping() to test the default mappings
-
Article article = new Article("Spring Data Elasticsearch");
article.setAuthors(asList(johnSmith, johnDoe));
article.setTags("elasticsearch", "spring data");
- articleService.save(article);
+ articleRepository.save(article);
article = new Article("Search engines");
article.setAuthors(asList(johnDoe));
article.setTags("search engines", "tutorial");
- articleService.save(article);
+ articleRepository.save(article);
article = new Article("Second Article About Elasticsearch");
article.setAuthors(asList(johnSmith));
article.setTags("elasticsearch", "spring data");
- articleService.save(article);
+ articleRepository.save(article);
article = new Article("Elasticsearch Tutorial");
article.setAuthors(asList(johnDoe));
article.setTags("elasticsearch");
- articleService.save(article);
+ articleRepository.save(article);
+ }
+
+ @After
+ public void after() {
+ articleRepository.deleteAll();
}
@Test
@@ -81,82 +84,85 @@ public class ElasticSearchManualTest {
Article article = new Article("Making Search Elastic");
article.setAuthors(authors);
- article = articleService.save(article);
+ article = articleRepository.save(article);
assertNotNull(article.getId());
}
@Test
public void givenPersistedArticles_whenSearchByAuthorsName_thenRightFound() {
-
- final Page articleByAuthorName = articleService
- .findByAuthorName(johnSmith.getName(), PageRequest.of(0, 10));
+ final Page articleByAuthorName = articleRepository.findByAuthorsName(johnSmith.getName(), PageRequest.of(0, 10));
assertEquals(2L, articleByAuthorName.getTotalElements());
}
@Test
public void givenCustomQuery_whenSearchByAuthorsName_thenArticleIsFound() {
- final Page articleByAuthorName = articleService.findByAuthorNameUsingCustomQuery("Smith", PageRequest.of(0, 10));
+ final Page articleByAuthorName = articleRepository.findByAuthorsNameUsingCustomQuery("Smith", PageRequest.of(0, 10));
assertEquals(2L, articleByAuthorName.getTotalElements());
}
@Test
public void givenTagFilterQuery_whenSearchByTag_thenArticleIsFound() {
- final Page articleByAuthorName = articleService.findByFilteredTagQuery("elasticsearch", PageRequest.of(0, 10));
+ final Page articleByAuthorName = articleRepository.findByFilteredTagQuery("elasticsearch", PageRequest.of(0, 10));
assertEquals(3L, articleByAuthorName.getTotalElements());
}
@Test
public void givenTagFilterQuery_whenSearchByAuthorsName_thenArticleIsFound() {
- final Page articleByAuthorName = articleService.findByAuthorsNameAndFilteredTagQuery("Doe", "elasticsearch", PageRequest.of(0, 10));
+ final Page articleByAuthorName = articleRepository.findByAuthorsNameAndFilteredTagQuery("Doe", "elasticsearch", PageRequest.of(0, 10));
assertEquals(2L, articleByAuthorName.getTotalElements());
}
@Test
public void givenPersistedArticles_whenUseRegexQuery_thenRightArticlesFound() {
+ final Query searchQuery = new NativeSearchQueryBuilder().withFilter(regexpQuery("title", ".*data.*"))
+ .build();
- final SearchQuery searchQuery = new NativeSearchQueryBuilder().withFilter(regexpQuery("title", ".*data.*"))
- .build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
- assertEquals(1, articles.size());
+ assertEquals(1, articles.getTotalHits());
}
@Test
public void givenSavedDoc_whenTitleUpdated_thenCouldFindByUpdatedTitle() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fuzzyQuery("title", "serch")).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
+ final Query searchQuery = new NativeSearchQueryBuilder().withQuery(fuzzyQuery("title", "serch"))
+ .build();
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
- assertEquals(1, articles.size());
+ assertEquals(1, articles.getTotalHits());
- final Article article = articles.get(0);
+ final Article article = articles.getSearchHit(0)
+ .getContent();
final String newTitle = "Getting started with Search Engines";
article.setTitle(newTitle);
- articleService.save(article);
+ articleRepository.save(article);
- assertEquals(newTitle, articleService.findOne(article.getId()).get().getTitle());
+ assertEquals(newTitle, articleRepository.findById(article.getId())
+ .get()
+ .getTitle());
}
@Test
public void givenSavedDoc_whenDelete_thenRemovedFromIndex() {
-
final String articleTitle = "Spring Data Elasticsearch";
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%")).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(1, articles.size());
- final long count = articleService.count();
+ final Query searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%"))
+ .build();
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
- articleService.delete(articles.get(0));
+ assertEquals(1, articles.getTotalHits());
+ final long count = articleRepository.count();
- assertEquals(count - 1, articleService.count());
+ articleRepository.delete(articles.getSearchHit(0)
+ .getContent());
+
+ assertEquals(count - 1, articleRepository.count());
}
@Test
public void givenSavedDoc_whenOneTermMatches_thenFindByTitle() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "Search engines").operator(AND)).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(1, articles.size());
+ final Query searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND))
+ .build();
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+ assertEquals(1, articles.getTotalHits());
}
}
diff --git a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryManualTest.java b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryManualTest.java
index 5e24d8398c..aaf0c80097 100644
--- a/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryManualTest.java
+++ b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryManualTest.java
@@ -2,7 +2,6 @@ package com.baeldung.spring.data.es;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;
-import static org.elasticsearch.index.query.Operator.AND;
import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchPhraseQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
@@ -14,190 +13,225 @@ import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.Map;
+import com.baeldung.spring.data.es.config.Config;
+import com.baeldung.spring.data.es.model.Article;
+import com.baeldung.spring.data.es.model.Author;
+import com.baeldung.spring.data.es.repository.ArticleRepository;
+
import org.apache.lucene.search.join.ScoreMode;
+import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.client.Client;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
+import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
+import org.elasticsearch.search.aggregations.BucketOrder;
import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation;
-import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
-import org.elasticsearch.search.aggregations.bucket.terms.Terms;
+import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
+import org.springframework.data.elasticsearch.core.SearchHits;
+import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
-import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import com.baeldung.spring.data.es.config.Config;
-import com.baeldung.spring.data.es.model.Article;
-import com.baeldung.spring.data.es.model.Author;
-import com.baeldung.spring.data.es.service.ArticleService;
-
/**
+ * This Manual test requires: Elasticsearch instance running on localhost:9200.
*
- * This Manual test requires:
- * * Elasticsearch instance running on host
- * * with cluster name = elasticsearch
- *
+ * The following docker command can be used: docker run -d --name es762 -p
+ * 9200:9200 -e "discovery.type=single-node" elasticsearch:7.6.2
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class ElasticSearchQueryManualTest {
@Autowired
- private ElasticsearchTemplate elasticsearchTemplate;
+ private ElasticsearchRestTemplate elasticsearchTemplate;
@Autowired
- private ArticleService articleService;
+ private ArticleRepository articleRepository;
@Autowired
- private Client client;
+ private RestHighLevelClient client;
private final Author johnSmith = new Author("John Smith");
private final Author johnDoe = new Author("John Doe");
@Before
public void before() {
- elasticsearchTemplate.deleteIndex(Article.class);
- elasticsearchTemplate.createIndex(Article.class);
- elasticsearchTemplate.putMapping(Article.class);
- elasticsearchTemplate.refresh(Article.class);
-
Article article = new Article("Spring Data Elasticsearch");
article.setAuthors(asList(johnSmith, johnDoe));
article.setTags("elasticsearch", "spring data");
- articleService.save(article);
+ articleRepository.save(article);
article = new Article("Search engines");
article.setAuthors(asList(johnDoe));
article.setTags("search engines", "tutorial");
- articleService.save(article);
+ articleRepository.save(article);
article = new Article("Second Article About Elasticsearch");
article.setAuthors(asList(johnSmith));
article.setTags("elasticsearch", "spring data");
- articleService.save(article);
+ articleRepository.save(article);
article = new Article("Elasticsearch Tutorial");
article.setAuthors(asList(johnDoe));
article.setTags("elasticsearch");
- articleService.save(article);
+ articleRepository.save(article);
+ }
+
+ @After
+ public void after() {
+ articleRepository.deleteAll();
}
@Test
public void givenFullTitle_whenRunMatchQuery_thenDocIsFound() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "Search engines").operator(AND)).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(1, articles.size());
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(Operator.AND))
+ .build();
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+ assertEquals(1, articles.getTotalHits());
}
@Test
public void givenOneTermFromTitle_whenRunMatchQuery_thenDocIsFound() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "Engines Solutions")).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(1, articles.size());
- assertEquals("Search engines", articles.get(0).getTitle());
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Engines Solutions"))
+ .build();
+
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+
+ assertEquals(1, articles.getTotalHits());
+ assertEquals("Search engines", articles.getSearchHit(0)
+ .getContent()
+ .getTitle());
}
@Test
public void givenPartTitle_whenRunMatchQuery_thenDocIsFound() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "elasticsearch data")).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(3, articles.size());
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "elasticsearch data"))
+ .build();
+
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+
+ assertEquals(3, articles.getTotalHits());
}
@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);
- assertEquals(1, articles.size());
+ NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title.verbatim", "Second Article About Elasticsearch"))
+ .build();
+
+ SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+
+ assertEquals(1, articles.getTotalHits());
searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title.verbatim", "Second Article About"))
- .build();
- articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(0, articles.size());
+ .build();
+
+ articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+ assertEquals(0, articles.getTotalHits());
}
@Test
public void givenNestedObject_whenQueryByAuthorsName_thenFoundArticlesByThatAuthor() {
final QueryBuilder builder = nestedQuery("authors", boolQuery().must(termQuery("authors.name", "smith")), ScoreMode.None);
- final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder)
+ .build();
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
- assertEquals(2, articles.size());
+ assertEquals(2, articles.getTotalHits());
}
@Test
- public void givenAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTokenCountsSeparately() {
- final TermsAggregationBuilder aggregation = AggregationBuilders.terms("top_tags").field("title");
- final SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation)
- .execute().actionGet();
+ public void givenAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTokenCountsSeparately() throws Exception {
+ final TermsAggregationBuilder aggregation = AggregationBuilders.terms("top_tags")
+ .field("title");
- final Map results = response.getAggregations().asMap();
- final StringTerms topTags = (StringTerms) results.get("top_tags");
+ final SearchSourceBuilder builder = new SearchSourceBuilder().aggregation(aggregation);
+ final SearchRequest searchRequest = new SearchRequest("blog").source(builder);
- final List keys = topTags.getBuckets().stream()
- .map(MultiBucketsAggregation.Bucket::getKeyAsString)
- .sorted()
- .collect(toList());
+ final SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
+
+ final Map results = response.getAggregations()
+ .asMap();
+ final ParsedStringTerms topTags = (ParsedStringTerms) results.get("top_tags");
+
+ final List keys = topTags.getBuckets()
+ .stream()
+ .map(MultiBucketsAggregation.Bucket::getKeyAsString)
+ .sorted()
+ .collect(toList());
assertEquals(asList("about", "article", "data", "elasticsearch", "engines", "search", "second", "spring", "tutorial"), keys);
}
@Test
- public void givenNotAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTermCountsIndividually() {
- final TermsAggregationBuilder aggregation = AggregationBuilders.terms("top_tags").field("tags")
- .order(Terms.Order.count(false));
- final SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation)
- .execute().actionGet();
+ public void givenNotAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTermCountsIndividually() throws Exception {
+ final TermsAggregationBuilder aggregation = AggregationBuilders.terms("top_tags")
+ .field("tags")
+ .order(BucketOrder.count(false));
- final Map results = response.getAggregations().asMap();
- final StringTerms topTags = (StringTerms) results.get("top_tags");
+ final SearchSourceBuilder builder = new SearchSourceBuilder().aggregation(aggregation);
+ final SearchRequest searchRequest = new SearchRequest().indices("blog")
+ .source(builder);
- final List keys = topTags.getBuckets().stream()
- .map(MultiBucketsAggregation.Bucket::getKeyAsString)
- .collect(toList());
+ final SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
+
+ final Map results = response.getAggregations()
+ .asMap();
+ final ParsedStringTerms topTags = (ParsedStringTerms) results.get("top_tags");
+
+ final List keys = topTags.getBuckets()
+ .stream()
+ .map(MultiBucketsAggregation.Bucket::getKeyAsString)
+ .collect(toList());
assertEquals(asList("elasticsearch", "spring data", "search engines", "tutorial"), keys);
}
@Test
public void givenNotExactPhrase_whenUseSlop_thenQueryMatches() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1)).build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(1, articles.size());
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1))
+ .build();
+
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+
+ assertEquals(1, articles.getTotalHits());
}
@Test
public void givenPhraseWithType_whenUseFuzziness_thenQueryMatches() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(matchQuery("title", "spring date elasticserch").operator(AND).fuzziness(Fuzziness.ONE)
- .prefixLength(3)).build();
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "spring date elasticserch").operator(Operator.AND)
+ .fuzziness(Fuzziness.ONE)
+ .prefixLength(3))
+ .build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(1, articles.size());
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+
+ assertEquals(1, articles.getTotalHits());
}
@Test
public void givenMultimatchQuery_whenDoSearch_thenAllProvidedFieldsMatch() {
- final SearchQuery searchQuery = new NativeSearchQueryBuilder()
- .withQuery(multiMatchQuery("tutorial").field("title").field("tags")
- .type(MultiMatchQueryBuilder.Type.BEST_FIELDS)).build();
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(multiMatchQuery("tutorial").field("title")
+ .field("tags")
+ .type(MultiMatchQueryBuilder.Type.BEST_FIELDS))
+ .build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
- assertEquals(2, articles.size());
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
+
+ assertEquals(2, articles.getTotalHits());
}
@Test
@@ -205,10 +239,10 @@ public class ElasticSearchQueryManualTest {
final QueryBuilder builder = boolQuery().must(nestedQuery("authors", boolQuery().must(termQuery("authors.name", "doe")), ScoreMode.None))
.filter(termQuery("tags", "elasticsearch"));
- final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder)
+ final NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder)
.build();
- final List articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);
+ final SearchHits articles = elasticsearchTemplate.search(searchQuery, Article.class, IndexCoordinates.of("blog"));
- assertEquals(2, articles.size());
+ assertEquals(2, articles.getTotalHits());
}
}