mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-14 08:02:11 +00:00
DATAES-206 - added GEO_POINT support for Point from Spring Data Commons
This commit is contained in:
parent
909caa732b
commit
21ff7e50cf
@ -16,9 +16,27 @@
|
||||
package org.springframework.data.elasticsearch.core;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.core.*;
|
||||
import com.fasterxml.jackson.databind.*;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.core.geo.CustomGeoModule;
|
||||
import org.springframework.data.geo.*;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.core.Version;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
/**
|
||||
* DocumentMapper using jackson
|
||||
@ -34,6 +52,7 @@ public class DefaultEntityMapper implements EntityMapper {
|
||||
objectMapper = new ObjectMapper();
|
||||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
|
||||
objectMapper.registerModule(new CustomGeoModule());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -33,6 +33,7 @@ import org.springframework.data.annotation.Transient;
|
||||
import org.springframework.data.elasticsearch.annotations.*;
|
||||
import org.springframework.data.elasticsearch.core.completion.Completion;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.geo.*;
|
||||
import org.springframework.data.mapping.model.SimpleTypeHolder;
|
||||
import org.springframework.data.util.ClassTypeInformation;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
@ -111,11 +112,11 @@ class MappingBuilder {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean isGeoField = isGeoField(field);
|
||||
boolean isGeoPointField = isGeoPointField(field);
|
||||
boolean isCompletionField = isCompletionField(field);
|
||||
|
||||
Field singleField = field.getAnnotation(Field.class);
|
||||
if (!isGeoField && !isCompletionField && isEntity(field) && isAnnotated(field)) {
|
||||
if (!isGeoPointField && !isCompletionField && isEntity(field) && isAnnotated(field)) {
|
||||
if (singleField == null) {
|
||||
continue;
|
||||
}
|
||||
@ -128,7 +129,7 @@ class MappingBuilder {
|
||||
|
||||
MultiField multiField = field.getAnnotation(MultiField.class);
|
||||
|
||||
if (isGeoField) {
|
||||
if (isGeoPointField) {
|
||||
applyGeoPointFieldMapping(xContentBuilder, field);
|
||||
}
|
||||
|
||||
@ -167,7 +168,10 @@ class MappingBuilder {
|
||||
}
|
||||
|
||||
private static boolean isAnnotated(java.lang.reflect.Field field) {
|
||||
return field.getAnnotation(Field.class) != null || field.getAnnotation(MultiField.class) != null || field.getAnnotation(GeoPointField.class) != null || field.getAnnotation(CompletionField.class) != null;
|
||||
return field.getAnnotation(Field.class) != null ||
|
||||
field.getAnnotation(MultiField.class) != null ||
|
||||
field.getAnnotation(GeoPointField.class) != null ||
|
||||
field.getAnnotation(CompletionField.class) != null;
|
||||
}
|
||||
|
||||
private static void applyGeoPointFieldMapping(XContentBuilder xContentBuilder, java.lang.reflect.Field field) throws IOException {
|
||||
@ -333,7 +337,7 @@ class MappingBuilder {
|
||||
return fieldAnnotation != null && (FieldType.Nested == fieldAnnotation.type() || FieldType.Object == fieldAnnotation.type());
|
||||
}
|
||||
|
||||
private static boolean isGeoField(java.lang.reflect.Field field) {
|
||||
private static boolean isGeoPointField(java.lang.reflect.Field field) {
|
||||
return field.getType() == GeoPoint.class || field.getAnnotation(GeoPointField.class) != null;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,70 @@
|
||||
package org.springframework.data.elasticsearch.core.geo;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.Version;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
import org.springframework.data.geo.Point;
|
||||
|
||||
/**
|
||||
* @author Artur Konaczak
|
||||
*/
|
||||
public class CustomGeoModule extends SimpleModule {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Creates a new {@link org.springframework.data.elasticsearch.core.geo.CustomGeoModule} registering serializers and deserializers for spring data commons geo-spatial types.
|
||||
*/
|
||||
public CustomGeoModule() {
|
||||
|
||||
super("Spring Data Elasticsearch Geo", new Version(1, 0, 0, null, "org.springframework.data.elasticsearch", "spring-data-elasticsearch-geo"));
|
||||
addSerializer(Point.class, new PointSerializer());
|
||||
addDeserializer(Point.class, new PointDeserializer());
|
||||
}
|
||||
}
|
||||
|
||||
class PointSerializer extends JsonSerializer<Point> {
|
||||
|
||||
@Override
|
||||
public void serialize(Point value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
|
||||
gen.writeObject(GeoPoint.fromPoint(value));
|
||||
// gen.writeStartObject();
|
||||
// gen.writeNumberField("lat", value.getY());
|
||||
// gen.writeNumberField("lon", value.getX());
|
||||
// gen.writeEndObject();
|
||||
}
|
||||
}
|
||||
|
||||
class PointDeserializer extends JsonDeserializer<Point> {
|
||||
|
||||
@Override
|
||||
public Point deserialize(JsonParser p, DeserializationContext context) throws IOException, JsonProcessingException {
|
||||
|
||||
GeoPoint point = p.readValueAs(GeoPoint.class);
|
||||
// Double lat = null;
|
||||
// Double lon = null;
|
||||
// //skipp field name
|
||||
// p.nextFieldName();
|
||||
// if ("lat".equals(p.getCurrentName())) {
|
||||
// //get value
|
||||
// p.nextFieldName();
|
||||
// lat = p.getDoubleValue();
|
||||
// p.nextFieldName();
|
||||
// }
|
||||
// if ("lon".equals(p.getCurrentName())) {
|
||||
// //get value
|
||||
// p.nextFieldName();
|
||||
// lon = p.getDoubleValue();
|
||||
// }
|
||||
// return new Point(lon, lat);
|
||||
return GeoPoint.toPoint(point);
|
||||
}
|
||||
}
|
@ -53,6 +53,10 @@ public class GeoPoint {
|
||||
public static GeoPoint fromPoint(Point point) {
|
||||
return new GeoPoint(point.getY(), point.getX());
|
||||
}
|
||||
|
||||
public static Point toPoint(GeoPoint point) {
|
||||
return new Point(point.getLat(), point.getLon());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -21,6 +21,7 @@ import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoBox;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.geo.Box;
|
||||
import org.springframework.data.geo.Distance;
|
||||
import org.springframework.data.geo.Point;
|
||||
import org.springframework.util.Assert;
|
||||
@ -453,6 +454,17 @@ public class Criteria {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates new CriteriaEntry for {@code location Box bounding box}
|
||||
*
|
||||
* @param boundingBox {@link org.springframework.data.elasticsearch.core.geo.GeoBox} bounding box(left top corner + right bottom corner)
|
||||
* @return Criteria the chaind criteria with the new 'boundingBox' criteria included.
|
||||
*/
|
||||
public Criteria boundedBy(Box boundingBox) {
|
||||
Assert.notNull(boundingBox, "boundingBox value for boundedBy criteria must not be null");
|
||||
filterCriteria.add(new CriteriaEntry(OperationKey.BBOX, new Object[]{boundingBox.getFirst(), boundingBox.getSecond()}));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates new CriteriaEntry for bounding box created from points
|
||||
@ -482,6 +494,13 @@ public class Criteria {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Criteria boundedBy(Point topLeftPoint, Point bottomRightPoint) {
|
||||
Assert.notNull(topLeftPoint, "topLeftPoint must not be null");
|
||||
Assert.notNull(bottomRightPoint, "bottomRightPoint must not be null");
|
||||
filterCriteria.add(new CriteriaEntry(OperationKey.BBOX, new Object[]{GeoPoint.fromPoint(topLeftPoint), GeoPoint.fromPoint(bottomRightPoint)}));
|
||||
return this;
|
||||
}
|
||||
|
||||
private void assertNoBlankInWildcardedQuery(String searchString, boolean leadingWildcard, boolean trailingWildcard) {
|
||||
if (StringUtils.contains(searchString, CRITERIA_VALUE_SEPERATOR)) {
|
||||
throw new InvalidDataAccessApiUsageException("Cannot constructQuery '" + (leadingWildcard ? "*" : "") + "\""
|
||||
|
@ -48,6 +48,7 @@ import org.springframework.data.elasticsearch.entities.Car;
|
||||
import org.springframework.data.elasticsearch.entities.GirlFriend;
|
||||
import org.springframework.data.elasticsearch.entities.Person;
|
||||
import org.springframework.data.elasticsearch.entities.PersonMultipleLevelNested;
|
||||
import org.springframework.data.geo.Point;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.elasticsearch.builder;
|
||||
|
||||
import org.springframework.data.elasticsearch.entities.Car;
|
||||
|
||||
/**
|
||||
* @author Artur Konczak
|
||||
*/
|
||||
public class CarBuilder {
|
||||
|
||||
private Car car = new Car();
|
||||
|
||||
public CarBuilder name(String name) {
|
||||
car.setName(name);
|
||||
return this;
|
||||
}
|
||||
|
||||
public CarBuilder model(String model) {
|
||||
car.setModel(model);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Car build() {
|
||||
return car;
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.elasticsearch.builder;
|
||||
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.entities.SampleEntity;
|
||||
|
||||
/**
|
||||
* @author Rizwan Idrees
|
||||
* @author Mohsin Husen
|
||||
* @author Artur Konczak
|
||||
*/
|
||||
public class SampleEntityBuilder {
|
||||
|
||||
private SampleEntity result;
|
||||
|
||||
public SampleEntityBuilder(String id) {
|
||||
result = new SampleEntity();
|
||||
result.setId(id);
|
||||
}
|
||||
|
||||
public SampleEntityBuilder type(String type) {
|
||||
result.setType(type);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SampleEntityBuilder message(String message) {
|
||||
result.setMessage(message);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SampleEntityBuilder rate(int rate) {
|
||||
result.setRate(rate);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SampleEntityBuilder available(boolean available) {
|
||||
result.setAvailable(available);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SampleEntityBuilder highlightedMessage(String highlightedMessage) {
|
||||
result.setHighlightedMessage(highlightedMessage);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SampleEntityBuilder version(Long version) {
|
||||
result.setVersion(version);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SampleEntity build() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public IndexQuery buildIndex() {
|
||||
IndexQuery indexQuery = new IndexQuery();
|
||||
indexQuery.setId(result.getId());
|
||||
indexQuery.setObject(result);
|
||||
return indexQuery;
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.elasticsearch.builder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.entities.StockPrice;
|
||||
|
||||
/**
|
||||
* @author Artur Konczak
|
||||
* @author Mohsin Husen
|
||||
*/
|
||||
public class StockPriceBuilder {
|
||||
|
||||
private StockPrice result;
|
||||
|
||||
public StockPriceBuilder(String id) {
|
||||
result = new StockPrice(id);
|
||||
}
|
||||
|
||||
public StockPriceBuilder symbol(String symbol) {
|
||||
result.setSymbol(symbol);
|
||||
return this;
|
||||
}
|
||||
|
||||
public StockPriceBuilder price(BigDecimal price) {
|
||||
result.setPrice(price);
|
||||
return this;
|
||||
}
|
||||
|
||||
public StockPriceBuilder price(double price) {
|
||||
result.setPrice(new BigDecimal(price));
|
||||
return this;
|
||||
}
|
||||
|
||||
public StockPrice build() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public IndexQuery buildIndex() {
|
||||
IndexQuery indexQuery = new IndexQuery();
|
||||
indexQuery.setId(result.getId());
|
||||
indexQuery.setObject(result);
|
||||
return indexQuery;
|
||||
}
|
||||
}
|
@ -28,7 +28,6 @@ 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.builder.SampleEntityBuilder;
|
||||
import org.springframework.data.elasticsearch.core.query.*;
|
||||
import org.springframework.data.elasticsearch.entities.SampleEntity;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
@ -113,7 +112,7 @@ public class AliasTests {
|
||||
elasticsearchTemplate.addAlias(aliasQuery);
|
||||
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
@ -168,7 +167,7 @@ public class AliasTests {
|
||||
elasticsearchTemplate.addAlias(aliasQuery2);
|
||||
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
|
@ -22,8 +22,10 @@ import java.io.IOException;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.data.elasticsearch.builder.CarBuilder;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.elasticsearch.entities.Car;
|
||||
import org.springframework.data.elasticsearch.entities.GeoEntity;
|
||||
import org.springframework.data.geo.Point;
|
||||
|
||||
/**
|
||||
* @author Artur Konczak
|
||||
@ -46,7 +48,7 @@ public class DefaultEntityMapperTests {
|
||||
//Given
|
||||
|
||||
//When
|
||||
String jsonResult = entityMapper.mapToString(new CarBuilder().model(CAR_MODEL).name(CAR_NAME).build());
|
||||
String jsonResult = entityMapper.mapToString(Car.builder().model(CAR_MODEL).name(CAR_NAME).build());
|
||||
|
||||
//Then
|
||||
assertThat(jsonResult, is(JSON_STRING));
|
||||
@ -63,4 +65,28 @@ public class DefaultEntityMapperTests {
|
||||
assertThat(result.getName(), is(CAR_NAME));
|
||||
assertThat(result.getModel(), is(CAR_MODEL));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldMapGeoPointElasticsearchNames() throws IOException {
|
||||
//given
|
||||
final Point point = new Point(10, 20);
|
||||
final int radius = 10;
|
||||
final String pointAsString = point.getX() + "," + point.getY();
|
||||
final double[] pointAsArray = {point.getX(), point.getY()};
|
||||
final GeoEntity geoEntity = GeoEntity.builder()
|
||||
.pointA(point).pointB(GeoPoint.fromPoint(point)).pointC(pointAsString).pointD(pointAsArray)
|
||||
.build();
|
||||
//when
|
||||
String jsonResult = entityMapper.mapToString(geoEntity);
|
||||
|
||||
//then
|
||||
assertThat(jsonResult, containsString(pointTemplate("pointA", point)));
|
||||
assertThat(jsonResult, containsString(pointTemplate("pointB", point)));
|
||||
assertThat(jsonResult, containsString(String.format("\"%s\":\"%s\"", "pointC", pointAsString)));
|
||||
assertThat(jsonResult, containsString(String.format("\"%s\":[%.1f,%.1f]", "pointD", pointAsArray[0], pointAsArray[1])));
|
||||
}
|
||||
|
||||
private String pointTemplate(String name, Point point) {
|
||||
return String.format("\"%s\":{\"lat\":%.1f,\"lon\":%.1f}", name, point.getY(), point.getX());
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,15 @@
|
||||
*/
|
||||
package org.springframework.data.elasticsearch.core;
|
||||
|
||||
import static org.apache.commons.lang.RandomStringUtils.*;
|
||||
import static org.elasticsearch.index.query.FilterBuilders.*;
|
||||
import static org.elasticsearch.index.query.QueryBuilders.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.springframework.data.elasticsearch.utils.IndexBuilder.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.elasticsearch.action.get.MultiGetItemResponse;
|
||||
import org.elasticsearch.action.get.MultiGetResponse;
|
||||
@ -36,7 +45,6 @@ import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.elasticsearch.ElasticsearchException;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.builder.SampleEntityBuilder;
|
||||
import org.springframework.data.elasticsearch.core.query.*;
|
||||
import org.springframework.data.elasticsearch.entities.HetroEntity1;
|
||||
import org.springframework.data.elasticsearch.entities.HetroEntity2;
|
||||
@ -46,15 +54,6 @@ import org.springframework.data.util.CloseableIterator;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.apache.commons.lang.RandomStringUtils.randomNumeric;
|
||||
import static org.elasticsearch.index.query.FilterBuilders.boolFilter;
|
||||
import static org.elasticsearch.index.query.FilterBuilders.termFilter;
|
||||
import static org.elasticsearch.index.query.QueryBuilders.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* @author Rizwan Idrees
|
||||
* @author Mohsin Husen
|
||||
@ -90,7 +89,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnCountForGivenCriteriaQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -107,7 +106,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnCountForGivenSearchQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -124,7 +123,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnObjectForGivenId() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
elasticsearchTemplate.index(indexQuery);
|
||||
@ -143,12 +142,12 @@ public class ElasticsearchTemplateTests {
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
// first document
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// second document
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2).message("some message")
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2));
|
||||
@ -171,14 +170,14 @@ public class ElasticsearchTemplateTests {
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
// first document
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId)
|
||||
.message("some message")
|
||||
.type("type1")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// second document
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2)
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2)
|
||||
.message("some message")
|
||||
.type("type2")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
@ -215,7 +214,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnPageForGivenSearchQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -237,12 +236,12 @@ public class ElasticsearchTemplateTests {
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
// first document
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// second document
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2).message("some message")
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2));
|
||||
@ -264,7 +263,7 @@ public class ElasticsearchTemplateTests {
|
||||
String messageBeforeUpdate = "some test message";
|
||||
String messageAfterUpdate = "test message";
|
||||
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message(messageBeforeUpdate)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
@ -278,7 +277,6 @@ public class ElasticsearchTemplateTests {
|
||||
UpdateQuery updateQuery = new UpdateQueryBuilder().withId(documentId)
|
||||
.withClass(SampleEntity.class).withIndexRequest(indexRequest).build();
|
||||
|
||||
|
||||
List<UpdateQuery> queries = new ArrayList<UpdateQuery>();
|
||||
queries.add(updateQuery);
|
||||
|
||||
@ -295,7 +293,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldDeleteDocumentForGivenId() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -314,7 +312,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldDeleteEntityForGivenId() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -333,7 +331,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldDeleteDocumentForGivenQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -353,7 +351,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldFilterSearchResultsForGivenFilter() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -374,21 +372,21 @@ public class ElasticsearchTemplateTests {
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
// first document
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId)
|
||||
.message("abc")
|
||||
.rate(10)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// second document
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2)
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2)
|
||||
.message("xyz")
|
||||
.rate(5)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// third document
|
||||
String documentId3 = randomNumeric(5);
|
||||
SampleEntity sampleEntity3 = new SampleEntityBuilder(documentId3)
|
||||
SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3)
|
||||
.message("xyz")
|
||||
.rate(15)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
@ -413,21 +411,21 @@ public class ElasticsearchTemplateTests {
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
// first document
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId)
|
||||
.message("abc")
|
||||
.rate(10)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// second document
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2)
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2)
|
||||
.message("xyz")
|
||||
.rate(5)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// third document
|
||||
String documentId3 = randomNumeric(5);
|
||||
SampleEntity sampleEntity3 = new SampleEntityBuilder(documentId3)
|
||||
SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3)
|
||||
.message("xyz")
|
||||
.rate(15)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
@ -452,7 +450,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldExecuteStringQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -471,7 +469,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnPageableResultsGivenStringQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -517,7 +515,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnObjectMatchingGivenStringQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -545,7 +543,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldExecuteGivenCriteriaQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("test message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -564,7 +562,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldDeleteGivenCriteriaQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("test message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -587,7 +585,7 @@ public class ElasticsearchTemplateTests {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
String message = "some test message";
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message(message)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message(message)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -623,7 +621,7 @@ public class ElasticsearchTemplateTests {
|
||||
+ "we want real-time search, we want simple multi-tenancy, and we want a solution that is built for the cloud.";
|
||||
|
||||
String documentId1 = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId1).message(sampleMessage)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId1).message(sampleMessage)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -632,7 +630,7 @@ public class ElasticsearchTemplateTests {
|
||||
|
||||
String documentId2 = randomNumeric(5);
|
||||
|
||||
elasticsearchTemplate.index(getIndexQuery(new SampleEntityBuilder(documentId2).message(sampleMessage)
|
||||
elasticsearchTemplate.index(getIndexQuery(SampleEntity.builder().id(documentId2).message(sampleMessage)
|
||||
.version(System.currentTimeMillis()).build()));
|
||||
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||
|
||||
@ -946,20 +944,20 @@ public class ElasticsearchTemplateTests {
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
// first document
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId)
|
||||
.message("test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// second document
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2)
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2)
|
||||
.message("test test")
|
||||
.rate(5)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// third document
|
||||
String documentId3 = randomNumeric(5);
|
||||
SampleEntity sampleEntity3 = new SampleEntityBuilder(documentId3)
|
||||
SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3)
|
||||
.message("some message")
|
||||
.rate(15)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
@ -987,20 +985,20 @@ public class ElasticsearchTemplateTests {
|
||||
// given
|
||||
// first document
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId)
|
||||
.message("test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// second document
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2)
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2)
|
||||
.message("test test")
|
||||
.rate(5)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
// third document
|
||||
String documentId3 = randomNumeric(5);
|
||||
SampleEntity sampleEntity3 = new SampleEntityBuilder(documentId3)
|
||||
SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3)
|
||||
.message("some message")
|
||||
.rate(15)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
@ -1043,7 +1041,7 @@ public class ElasticsearchTemplateTests {
|
||||
String messageBeforeUpdate = "some test message";
|
||||
String messageAfterUpdate = "test message";
|
||||
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message(messageBeforeUpdate)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
@ -1101,7 +1099,7 @@ public class ElasticsearchTemplateTests {
|
||||
String actualMessage = "some test message";
|
||||
String highlightedMessage = "some <em>test</em> message";
|
||||
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message(actualMessage)
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
@ -1143,7 +1141,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldDeleteSpecifiedTypeFromAnIndex() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
@ -1164,7 +1162,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
@ -1256,9 +1254,9 @@ public class ElasticsearchTemplateTests {
|
||||
// given
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
|
||||
indexQueries.add(new SampleEntityBuilder("1").message("ab").buildIndex());
|
||||
indexQueries.add(new SampleEntityBuilder("2").message("bc").buildIndex());
|
||||
indexQueries.add(new SampleEntityBuilder("3").message("ac").buildIndex());
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("1").message("ab").build()));
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("2").message("bc").build()));
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("3").message("ac").build()));
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||
@ -1403,7 +1401,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldIndexSampleEntityWithIndexAndTypeAtRuntime() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId)
|
||||
.message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
@ -1430,7 +1428,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnCountForGivenCriteriaQueryWithGivenIndexUsingCriteriaQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -1451,7 +1449,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnCountForGivenSearchQueryWithGivenIndexUsingSearchQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -1474,7 +1472,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnCountForGivenCriteriaQueryWithGivenIndexAndTypeUsingCriteriaQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -1496,7 +1494,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldReturnCountForGivenSearchQueryWithGivenIndexAndTypeUsingSearchQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -1521,7 +1519,7 @@ public class ElasticsearchTemplateTests {
|
||||
// given
|
||||
cleanUpIndices();
|
||||
String documentId1 = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId1).message("some message")
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId1).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery1 = new IndexQueryBuilder().withId(sampleEntity1.getId())
|
||||
@ -1530,7 +1528,7 @@ public class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2).message("some test message")
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery2 = new IndexQueryBuilder().withId(sampleEntity2.getId())
|
||||
@ -1558,7 +1556,7 @@ public class ElasticsearchTemplateTests {
|
||||
// given
|
||||
cleanUpIndices();
|
||||
String documentId1 = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId1).message("some message")
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId1).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery1 = new IndexQueryBuilder().withId(sampleEntity1.getId())
|
||||
@ -1567,7 +1565,7 @@ public class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2).message("some test message")
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery2 = new IndexQueryBuilder().withId(sampleEntity2.getId())
|
||||
@ -1634,7 +1632,7 @@ public class ElasticsearchTemplateTests {
|
||||
// given
|
||||
cleanUpIndices();
|
||||
String documentId1 = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId1).message("some message")
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId1).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery1 = new IndexQueryBuilder().withId(sampleEntity1.getId())
|
||||
@ -1643,7 +1641,7 @@ public class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2).message("some test message")
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery2 = new IndexQueryBuilder().withId(sampleEntity2.getId())
|
||||
@ -1671,7 +1669,7 @@ public class ElasticsearchTemplateTests {
|
||||
// given
|
||||
cleanUpIndices();
|
||||
String documentId1 = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId1).message("some message")
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId1).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery1 = new IndexQueryBuilder().withId(sampleEntity1.getId())
|
||||
@ -1680,7 +1678,7 @@ public class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2).message("some test message")
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery2 = new IndexQueryBuilder().withId(sampleEntity2.getId())
|
||||
@ -1706,7 +1704,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldThrowAnExceptionForGivenCriteriaQueryWhenNoIndexSpecifiedForCountQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -1726,7 +1724,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldThrowAnExceptionForGivenSearchQueryWhenNoIndexSpecifiedForCountQuery() {
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
SampleEntity sampleEntity = new SampleEntityBuilder(documentId).message("some message")
|
||||
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
@ -1833,7 +1831,7 @@ public class ElasticsearchTemplateTests {
|
||||
public void shouldTestResultsAcrossMultipleIndices() {
|
||||
// given
|
||||
String documentId1 = randomNumeric(5);
|
||||
SampleEntity sampleEntity1 = new SampleEntityBuilder(documentId1).message("some message")
|
||||
SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId1).message("some message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery1 = new IndexQueryBuilder().withId(sampleEntity1.getId())
|
||||
@ -1842,7 +1840,7 @@ public class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
String documentId2 = randomNumeric(5);
|
||||
SampleEntity sampleEntity2 = new SampleEntityBuilder(documentId2).message("some test message")
|
||||
SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some test message")
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
IndexQuery indexQuery2 = new IndexQueryBuilder().withId(sampleEntity2.getId())
|
||||
|
@ -19,6 +19,7 @@ package org.springframework.data.elasticsearch.core;
|
||||
import static org.elasticsearch.index.query.QueryBuilders.*;
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.springframework.data.elasticsearch.utils.IndexBuilder.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
@ -30,10 +31,10 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.elasticsearch.builder.SampleInheritedEntityBuilder;
|
||||
import org.springframework.data.elasticsearch.builder.StockPriceBuilder;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
||||
import org.springframework.data.elasticsearch.core.query.SearchQuery;
|
||||
import org.springframework.data.elasticsearch.entities.*;
|
||||
import org.springframework.data.elasticsearch.entities.GeoEntity;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@ -89,7 +90,7 @@ public class MappingBuilderTests {
|
||||
String symbol = "AU";
|
||||
double price = 2.34;
|
||||
String id = "abc";
|
||||
elasticsearchTemplate.index(new StockPriceBuilder(id).symbol(symbol).price(price).buildIndex());
|
||||
elasticsearchTemplate.index(buildIndex(StockPrice.builder().id(id).symbol(symbol).price(new BigDecimal(price)).build()));
|
||||
elasticsearchTemplate.refresh(StockPrice.class, true);
|
||||
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
@ -147,4 +148,20 @@ public class MappingBuilderTests {
|
||||
assertThat(entry.getCreatedDate(), is(createdDate));
|
||||
assertThat(entry.getMessage(), is(message));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldBuildMappingsForGeoPoint() throws IOException {
|
||||
//given
|
||||
|
||||
//when
|
||||
XContentBuilder xContentBuilder = MappingBuilder.buildMapping(GeoEntity.class, "mapping", "id", null);
|
||||
|
||||
//then
|
||||
final String result = xContentBuilder.string();
|
||||
|
||||
assertThat(result, containsString("\"pointA\":{\"type\":\"geo_point\""));
|
||||
assertThat(result, containsString("\"pointB\":{\"type\":\"geo_point\""));
|
||||
assertThat(result, containsString("\"pointC\":{\"type\":\"geo_point\""));
|
||||
assertThat(result, containsString("\"pointD\":{\"type\":\"geo_point\""));
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ import java.util.List;
|
||||
|
||||
import org.elasticsearch.common.geo.GeoHashUtils;
|
||||
import org.elasticsearch.index.query.FilterBuilders;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -33,6 +32,7 @@ import org.springframework.data.elasticsearch.core.query.Criteria;
|
||||
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
||||
import org.springframework.data.geo.Point;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@ -248,6 +248,23 @@ public class ElasticsearchTemplateGeoTests {
|
||||
assertThat(geoAuthorsForGeoCriteria3, containsInAnyOrder(hasProperty("name", equalTo("Mohsin Husen")), hasProperty("name", equalTo("Rizwan Idrees"))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFindAuthorMarkersInBoxForGivenCriteriaQueryUsingPoints() {
|
||||
//given
|
||||
loadClassBaseEntities();
|
||||
CriteriaQuery geoLocationCriteriaQuery3 = new CriteriaQuery(
|
||||
new Criteria("location").boundedBy(
|
||||
new Point(0, 53.5171d),
|
||||
new Point(0.2062d, 49.5171d))
|
||||
);
|
||||
//when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria3 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery3, AuthorMarkerEntity.class);
|
||||
|
||||
//then
|
||||
assertThat(geoAuthorsForGeoCriteria3.size(), is(2));
|
||||
assertThat(geoAuthorsForGeoCriteria3, containsInAnyOrder(hasProperty("name", equalTo("Mohsin Husen")), hasProperty("name", equalTo("Rizwan Idrees"))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFindLocationWithGeoHashPrefix() {
|
||||
|
||||
|
@ -18,6 +18,7 @@ package org.springframework.data.elasticsearch.core.query;
|
||||
import static org.apache.commons.lang.RandomStringUtils.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.springframework.data.elasticsearch.utils.IndexBuilder.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -28,7 +29,6 @@ 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.elasticsearch.builder.SampleEntityBuilder;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.entities.SampleEntity;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
@ -707,9 +707,9 @@ public class CriteriaQueryTests {
|
||||
// given
|
||||
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||
|
||||
indexQueries.add(new SampleEntityBuilder("1").message("ab").buildIndex());
|
||||
indexQueries.add(new SampleEntityBuilder("2").message("bc").buildIndex());
|
||||
indexQueries.add(new SampleEntityBuilder("3").message("ac").buildIndex());
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("1").message("ab").build()));
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("2").message("bc").build()));
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("3").message("ac").build()));
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||
|
@ -19,6 +19,7 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import lombok.*;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
@ -28,6 +29,11 @@ import org.springframework.data.elasticsearch.annotations.FieldType;
|
||||
* @author Rizwan Idrees
|
||||
* @author Mohsin Husen
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@Document(indexName = "book", type = "book", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
|
||||
public class Book {
|
||||
|
||||
@ -38,36 +44,4 @@ public class Book {
|
||||
private Author author;
|
||||
@Field(type = FieldType.Nested)
|
||||
private Map<Integer, Collection<String>> buckets = new HashMap<Integer, Collection<String>>();
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Author getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(Author author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public Map<Integer, Collection<String>> getBuckets() {
|
||||
return buckets;
|
||||
}
|
||||
|
||||
public void setBuckets(Map<Integer, Collection<String>> buckets) {
|
||||
this.buckets = buckets;
|
||||
}
|
||||
}
|
||||
|
@ -15,11 +15,18 @@
|
||||
*/
|
||||
package org.springframework.data.elasticsearch.entities;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
/**
|
||||
* @author Rizwan Idrees
|
||||
* @author Mohsin Husen
|
||||
* @author Artur Konczak
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class Car {
|
||||
|
||||
private String name;
|
||||
|
@ -0,0 +1,44 @@
|
||||
package org.springframework.data.elasticsearch.entities;
|
||||
|
||||
import lombok.*;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.GeoPointField;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoBox;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.geo.Box;
|
||||
import org.springframework.data.geo.Circle;
|
||||
import org.springframework.data.geo.Point;
|
||||
import org.springframework.data.geo.Polygon;
|
||||
|
||||
/**
|
||||
* @author Artur Konczak
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@Document(indexName = "geo-test-index", type = "geo-test-index", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
|
||||
public class GeoEntity {
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
//geo shape - Spring Data
|
||||
private Box box;
|
||||
private Circle circle;
|
||||
private Polygon polygon;
|
||||
|
||||
//geo point - Custom implementation + Spring Data
|
||||
@GeoPointField
|
||||
private Point pointA;
|
||||
|
||||
private GeoPoint pointB;
|
||||
|
||||
@GeoPointField
|
||||
private String pointC;
|
||||
|
||||
@GeoPointField
|
||||
private double[] pointD;
|
||||
}
|
@ -15,8 +15,7 @@
|
||||
*/
|
||||
package org.springframework.data.elasticsearch.entities;
|
||||
|
||||
import org.apache.commons.lang.builder.EqualsBuilder;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
import lombok.*;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Version;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
@ -26,6 +25,12 @@ import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
* @author Rizwan Idrees
|
||||
* @author Mohsin Husen
|
||||
*/
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@Document(indexName = "test-index", type = "test-type", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
|
||||
public class SampleEntity {
|
||||
|
||||
@ -42,99 +47,36 @@ public class SampleEntity {
|
||||
@Version
|
||||
private Long version;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public int getRate() {
|
||||
return rate;
|
||||
}
|
||||
|
||||
public void setRate(int rate) {
|
||||
this.rate = rate;
|
||||
}
|
||||
|
||||
public boolean isAvailable() {
|
||||
return available;
|
||||
}
|
||||
|
||||
public void setAvailable(boolean available) {
|
||||
this.available = available;
|
||||
}
|
||||
|
||||
public String getHighlightedMessage() {
|
||||
return highlightedMessage;
|
||||
}
|
||||
|
||||
public void setHighlightedMessage(String highlightedMessage) {
|
||||
this.highlightedMessage = highlightedMessage;
|
||||
}
|
||||
|
||||
public GeoPoint getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public void setLocation(GeoPoint location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public Long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(Long version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof SampleEntity)) {
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
SampleEntity that = (SampleEntity) o;
|
||||
|
||||
if (available != that.available) return false;
|
||||
if (rate != that.rate) return false;
|
||||
if (highlightedMessage != null ? !highlightedMessage.equals(that.highlightedMessage) : that.highlightedMessage != null)
|
||||
return false;
|
||||
}
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
SampleEntity rhs = (SampleEntity) obj;
|
||||
return new EqualsBuilder().append(this.id, rhs.id).append(this.type, rhs.type).append(this.message, rhs.message)
|
||||
.append(this.rate, rhs.rate).append(this.available, rhs.available).append(this.version, rhs.version).isEquals();
|
||||
if (id != null ? !id.equals(that.id) : that.id != null) return false;
|
||||
if (location != null ? !location.equals(that.location) : that.location != null) return false;
|
||||
if (message != null ? !message.equals(that.message) : that.message != null) return false;
|
||||
if (type != null ? !type.equals(that.type) : that.type != null) return false;
|
||||
if (version != null ? !version.equals(that.version) : that.version != null) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return new HashCodeBuilder().append(id).append(type).append(message).append(rate).append(available).append(version)
|
||||
.toHashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SampleEntity{" +
|
||||
"id='" + id + '\'' +
|
||||
", type='" + type + '\'' +
|
||||
", message='" + message + '\'' +
|
||||
", rate=" + rate +
|
||||
", available=" + available +
|
||||
", highlightedMessage='" + highlightedMessage + '\'' +
|
||||
", version=" + version +
|
||||
'}';
|
||||
int result = id != null ? id.hashCode() : 0;
|
||||
result = 31 * result + (type != null ? type.hashCode() : 0);
|
||||
result = 31 * result + (message != null ? message.hashCode() : 0);
|
||||
result = 31 * result + rate;
|
||||
result = 31 * result + (available ? 1 : 0);
|
||||
result = 31 * result + (highlightedMessage != null ? highlightedMessage.hashCode() : 0);
|
||||
result = 31 * result + (location != null ? location.hashCode() : 0);
|
||||
result = 31 * result + (version != null ? version.hashCode() : 0);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ package org.springframework.data.elasticsearch.entities;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import lombok.*;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
@ -26,6 +27,11 @@ import org.springframework.data.elasticsearch.annotations.FieldType;
|
||||
* @author Artur Konczak
|
||||
* @author Mohsin Husen
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@Document(indexName = "stock", type = "price", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
|
||||
public class StockPrice {
|
||||
|
||||
@ -36,36 +42,4 @@ public class StockPrice {
|
||||
|
||||
@Field(type = FieldType.Double)
|
||||
private BigDecimal price;
|
||||
|
||||
private StockPrice() {
|
||||
//don't delete
|
||||
}
|
||||
|
||||
public StockPrice(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getSymbol() {
|
||||
return symbol;
|
||||
}
|
||||
|
||||
public void setSymbol(String symbol) {
|
||||
this.symbol = symbol;
|
||||
}
|
||||
|
||||
public BigDecimal getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(BigDecimal price) {
|
||||
this.price = price;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
package org.springframework.data.elasticsearch.repositories.geo;
|
||||
|
||||
import org.springframework.data.elasticsearch.entities.GeoEntity;
|
||||
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
|
||||
|
||||
/**
|
||||
* Created by akonczak on 22/11/2015.
|
||||
*/
|
||||
public interface SpringDataGeoRepository extends ElasticsearchRepository<GeoEntity, String> {
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package org.springframework.data.elasticsearch.repositories.geo;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
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.geo.GeoPoint;
|
||||
import org.springframework.data.elasticsearch.entities.GeoEntity;
|
||||
import org.springframework.data.geo.Point;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration("classpath:/repository-spring-data-geo-support.xml")
|
||||
public class SpringDataGeoRepositoryTest {
|
||||
|
||||
@Autowired
|
||||
private ElasticsearchTemplate template;
|
||||
|
||||
@Autowired
|
||||
private SpringDataGeoRepository repository;
|
||||
|
||||
@Before
|
||||
public void init() {
|
||||
template.deleteIndex(GeoEntity.class);
|
||||
template.createIndex(GeoEntity.class);
|
||||
template.putMapping(GeoEntity.class);
|
||||
template.refresh(GeoEntity.class, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldSaveAndLoadGeoPoints() {
|
||||
//given
|
||||
final Point point = new Point(15, 25);
|
||||
GeoEntity entity = GeoEntity.builder()
|
||||
.pointA(point)
|
||||
.pointB(new GeoPoint(point.getX(), point.getY()))
|
||||
.pointC(toGeoString(point))
|
||||
.pointD(toGeoArray(point))
|
||||
.build();
|
||||
//when
|
||||
entity = repository.save(entity);
|
||||
GeoEntity result = repository.findOne(entity.getId());
|
||||
//then
|
||||
|
||||
assertThat(entity.getPointA(), is(result.getPointA()));
|
||||
assertThat(entity.getPointB(), is(result.getPointB()));
|
||||
assertThat(entity.getPointC(), is(result.getPointC()));
|
||||
assertThat(entity.getPointD(), is(result.getPointD()));
|
||||
}
|
||||
|
||||
private String toGeoString(Point point) {
|
||||
return String.format("%.1f,%.1f", point.getX(), point.getY());
|
||||
}
|
||||
|
||||
private double[] toGeoArray(Point point) {
|
||||
return new double[]{
|
||||
point.getX(), point.getY()
|
||||
};
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package org.springframework.data.elasticsearch.utils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
|
||||
/**
|
||||
* Created by akonczak on 02/12/2015.
|
||||
*/
|
||||
public class IndexBuilder {
|
||||
|
||||
public static IndexQuery buildIndex(Object object) {
|
||||
for (Field f : object.getClass().getDeclaredFields()) {
|
||||
if (ArrayUtils.isNotEmpty(f.getAnnotationsByType(org.springframework.data.annotation.Id.class))) {
|
||||
try {
|
||||
f.setAccessible(true);
|
||||
IndexQuery indexQuery = new IndexQuery();
|
||||
indexQuery.setId((String) f.get(object));
|
||||
indexQuery.setObject(object);
|
||||
return indexQuery;
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("Missing @Id field");
|
||||
}
|
||||
}
|
17
src/test/resources/repository-spring-data-geo-support.xml
Normal file
17
src/test/resources/repository-spring-data-geo-support.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
|
||||
|
||||
<import resource="infrastructure.xml"/>
|
||||
|
||||
<bean name="elasticsearchTemplate"
|
||||
class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
|
||||
<constructor-arg name="client" ref="client"/>
|
||||
</bean>
|
||||
|
||||
<elasticsearch:repositories base-package="org.springframework.data.elasticsearch.repositories.geo"/>
|
||||
|
||||
</beans>
|
Loading…
x
Reference in New Issue
Block a user