diff --git a/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java b/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java index 8c4fc11ca..dfc0eb9a2 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java @@ -24,10 +24,10 @@ import java.util.List; import java.util.ListIterator; import org.apache.lucene.queryparser.flexible.core.util.StringUtils; -import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.BoostableQueryBuilder; -import org.elasticsearch.index.query.QueryBuilder; +import org.elasticsearch.index.query.*; +import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.data.elasticsearch.core.query.Criteria; +import org.springframework.data.geo.Point; import org.springframework.util.Assert; /** @@ -118,9 +118,9 @@ class CriteriaQueryProcessor { } QueryBuilder query = null; - String searchText = StringUtils.toString(value); + String searchText = StringUtils.toString(value); - switch (key) { + switch (key) { case EQUALS: query = queryString(searchText).field(fieldName); break; diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/Criteria.java b/src/main/java/org/springframework/data/elasticsearch/core/query/Criteria.java index 0ee92f413..8f0b51597 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/Criteria.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/Criteria.java @@ -193,7 +193,7 @@ public class Criteria { * @return */ public Criteria is(Object o) { - queryCriteria.add(new CriteriaEntry(OperationKey.EQUALS, o)); + queryCriteria.add(new CriteriaEntry(OperationKey.EQUALS, o)); return this; } diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/parser/ElasticsearchQueryCreator.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/parser/ElasticsearchQueryCreator.java index 676612dfe..353e78e23 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/parser/ElasticsearchQueryCreator.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/parser/ElasticsearchQueryCreator.java @@ -61,7 +61,7 @@ public class ElasticsearchQueryCreator extends AbstractQueryCreator iterator) { PersistentPropertyPath path = context .getPersistentPropertyPath(part.getProperty()); - return new CriteriaQuery(from(part.getType(), + return new CriteriaQuery(from(part, new Criteria(path.toDotPath(ElasticsearchPersistentProperty.PropertyToFieldNameConverter.INSTANCE)), iterator)); } @@ -72,7 +72,7 @@ public class ElasticsearchQueryCreator extends AbstractQueryCreator path = context .getPersistentPropertyPath(part.getProperty()); - return base.addCriteria(from(part.getType(), + return base.addCriteria(from(part, new Criteria(path.toDotPath(ElasticsearchPersistentProperty.PropertyToFieldNameConverter.INSTANCE)), iterator)); } @@ -89,7 +89,9 @@ public class ElasticsearchQueryCreator extends AbstractQueryCreator parameters) { + private Criteria from(Part part, Criteria instance, Iterator parameters) { + Part.Type type = part.getType(); + Criteria criteria = instance; if (criteria == null) { criteria = new Criteria(); @@ -99,8 +101,6 @@ public class ElasticsearchQueryCreator extends AbstractQueryCreator page = repository.findByLocation(new GeoPoint(45.7806d, 3.0875d), new PageRequest(0, 10)); + // then + assertThat(page, is(notNullValue())); + assertThat(page.getTotalElements(), is(equalTo(1L))); + } + @Test + public void shouldExecuteCustomMethodWithGeoPointAndString() { + // given + String documentId = randomNumeric(5); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setType("test"); + sampleEntity.setRate(10); + sampleEntity.setMessage("foo"); + sampleEntity.setLocation(new GeoPoint(45.7806d, 3.0875d)); + + repository.save(sampleEntity); + + documentId = randomNumeric(5); + sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setType("test"); + sampleEntity.setRate(10); + sampleEntity.setMessage("foo"); + sampleEntity.setLocation(new GeoPoint(48.7806d, 3.0875d)); + + repository.save(sampleEntity); + + // when + Page page = repository.findByLocationAndMessage(new GeoPoint(45.7806d, 3.0875d), "foo", new PageRequest(0, 10)); + // then + assertThat(page, is(notNullValue())); + assertThat(page.getTotalElements(), is(equalTo(1L))); + } + @Test public void shouldExecuteCustomMethodWithWithinGeoPoint() { // given diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/custom/SampleCustomMethodRepository.java b/src/test/java/org/springframework/data/elasticsearch/repositories/custom/SampleCustomMethodRepository.java index 78ea15e4f..ea5283408 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/custom/SampleCustomMethodRepository.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/custom/SampleCustomMethodRepository.java @@ -71,7 +71,11 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository findByMessageOrderByTypeAsc(String message, Pageable pageable); - Page findByLocationWithin(GeoPoint point, String distance, Pageable pageable); + Page findByLocation(GeoPoint point, Pageable pageable); + + Page findByLocationAndMessage(GeoPoint point, String msg, Pageable pageable); + + Page findByLocationWithin(GeoPoint point, String distance, Pageable pageable); Page findByLocationWithin(Point point, Distance distance, Pageable pageable);