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 e253dbb2d..ab01d127a 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java @@ -28,6 +28,7 @@ import java.util.ListIterator; import org.apache.lucene.queryparser.flexible.core.util.StringUtils; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; +import org.apache.lucene.queryparser.flexible.standard.QueryParserUtil; import org.springframework.data.elasticsearch.core.query.Criteria; import org.springframework.util.Assert; @@ -39,6 +40,7 @@ import org.springframework.util.Assert; * @author Franck Marchand * @author Artur Konczak * @author Rasmus Faber-Espensen + * @author James Bodkin */ class CriteriaQueryProcessor { @@ -141,7 +143,7 @@ class CriteriaQueryProcessor { OperationKey key = entry.getKey(); QueryBuilder query = null; - String searchText = StringUtils.toString(value); + String searchText = QueryParserUtil.escape(StringUtils.toString(value)); switch (key) { case EQUALS: diff --git a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java index c694d62cb..3c5af4205 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java @@ -49,6 +49,7 @@ import org.springframework.test.context.junit4.SpringRunner; * @author Rizwan Idrees * @author Mohsin Husen * @author Peter-Josef Meisch + * @author James Bodkin */ @RunWith(SpringRunner.class) @ContextConfiguration("classpath:elasticsearch-template-test.xml") @@ -798,6 +799,31 @@ public class CriteriaQueryTests { assertThat(page.getContent().get(0).getMessage()).isEqualTo("ab"); } + @Test + public void shouldEscapeValue() { + + // given + String documentId = randomNumeric(5); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setMessage("Hello World!"); + sampleEntity.setVersion(System.currentTimeMillis()); + + IndexQuery indexQuery = new IndexQuery(); + indexQuery.setId(documentId); + indexQuery.setObject(sampleEntity); + elasticsearchTemplate.index(indexQuery); + elasticsearchTemplate.refresh(SampleEntity.class); + + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("Hello World!")); + + // when + SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class); + + // then + assertThat(sampleEntity1).isNotNull(); + } + @Builder @Setter @Getter