Skip to content

Commit 0b062a4

Browse files
JBodkinsothawo
authored andcommitted
DATAES-213 - Escape text in queries.
Original PR: spring-projects#318
1 parent 40d0ec2 commit 0b062a4

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.lucene.queryparser.flexible.core.util.StringUtils;
2929
import org.elasticsearch.index.query.BoolQueryBuilder;
3030
import org.elasticsearch.index.query.QueryBuilder;
31+
import org.apache.lucene.queryparser.flexible.standard.QueryParserUtil;
3132
import org.springframework.data.elasticsearch.core.query.Criteria;
3233
import org.springframework.util.Assert;
3334

@@ -39,6 +40,7 @@
3940
* @author Franck Marchand
4041
* @author Artur Konczak
4142
* @author Rasmus Faber-Espensen
43+
* @author James Bodkin
4244
*/
4345
class CriteriaQueryProcessor {
4446

@@ -141,7 +143,7 @@ private QueryBuilder processCriteriaEntry(Criteria.CriteriaEntry entry,
141143
OperationKey key = entry.getKey();
142144
QueryBuilder query = null;
143145

144-
String searchText = StringUtils.toString(value);
146+
String searchText = QueryParserUtil.escape(StringUtils.toString(value));
145147

146148
switch (key) {
147149
case EQUALS:

src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
* @author Rizwan Idrees
5050
* @author Mohsin Husen
5151
* @author Peter-Josef Meisch
52+
* @author James Bodkin
5253
*/
5354
@RunWith(SpringRunner.class)
5455
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
@@ -798,6 +799,31 @@ public void shouldReturnDocumentAboveMinimalScoreGivenCriteria() {
798799
assertThat(page.getContent().get(0).getMessage()).isEqualTo("ab");
799800
}
800801

802+
@Test
803+
public void shouldEscapeValue() {
804+
805+
// given
806+
String documentId = randomNumeric(5);
807+
SampleEntity sampleEntity = new SampleEntity();
808+
sampleEntity.setId(documentId);
809+
sampleEntity.setMessage("Hello World!");
810+
sampleEntity.setVersion(System.currentTimeMillis());
811+
812+
IndexQuery indexQuery = new IndexQuery();
813+
indexQuery.setId(documentId);
814+
indexQuery.setObject(sampleEntity);
815+
elasticsearchTemplate.index(indexQuery);
816+
elasticsearchTemplate.refresh(SampleEntity.class);
817+
818+
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("Hello World!"));
819+
820+
// when
821+
SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
822+
823+
// then
824+
assertThat(sampleEntity1).isNotNull();
825+
}
826+
801827
@Builder
802828
@Setter
803829
@Getter

0 commit comments

Comments
 (0)