DATAES-213 - Escape text in queries.

Original PR:  #318
This commit is contained in:
JBodkin 2019-09-11 19:21:12 +01:00 committed by Peter-Josef Meisch
parent 40d0ec2801
commit 0b062a4a52
2 changed files with 29 additions and 1 deletions

View File

@ -28,6 +28,7 @@ import java.util.ListIterator;
import org.apache.lucene.queryparser.flexible.core.util.StringUtils; import org.apache.lucene.queryparser.flexible.core.util.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder; 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.data.elasticsearch.core.query.Criteria;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -39,6 +40,7 @@ import org.springframework.util.Assert;
* @author Franck Marchand * @author Franck Marchand
* @author Artur Konczak * @author Artur Konczak
* @author Rasmus Faber-Espensen * @author Rasmus Faber-Espensen
* @author James Bodkin
*/ */
class CriteriaQueryProcessor { class CriteriaQueryProcessor {
@ -141,7 +143,7 @@ class CriteriaQueryProcessor {
OperationKey key = entry.getKey(); OperationKey key = entry.getKey();
QueryBuilder query = null; QueryBuilder query = null;
String searchText = StringUtils.toString(value); String searchText = QueryParserUtil.escape(StringUtils.toString(value));
switch (key) { switch (key) {
case EQUALS: case EQUALS:

View File

@ -49,6 +49,7 @@ import org.springframework.test.context.junit4.SpringRunner;
* @author Rizwan Idrees * @author Rizwan Idrees
* @author Mohsin Husen * @author Mohsin Husen
* @author Peter-Josef Meisch * @author Peter-Josef Meisch
* @author James Bodkin
*/ */
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@ContextConfiguration("classpath:elasticsearch-template-test.xml") @ContextConfiguration("classpath:elasticsearch-template-test.xml")
@ -798,6 +799,31 @@ public class CriteriaQueryTests {
assertThat(page.getContent().get(0).getMessage()).isEqualTo("ab"); 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 @Builder
@Setter @Setter
@Getter @Getter