From b8324f9205aafc491cb9f29afccd5ce82e876216 Mon Sep 17 00:00:00 2001 From: jnizet Date: Thu, 9 Aug 2018 20:04:18 +0200 Subject: [PATCH] DATAES-479 - Allow specifying a HighlightBuilder when creating a query. Original pull request: #217. --- .../core/ElasticsearchTemplate.java | 12 ++- .../core/query/NativeSearchQuery.java | 18 +++- .../core/query/NativeSearchQueryBuilder.java | 9 +- .../elasticsearch/core/query/SearchQuery.java | 5 +- .../core/ElasticsearchTemplateTests.java | 87 ++++++++++++++++++- 5 files changed, 122 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index a5635fb8b..a3f302a42 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -134,6 +134,7 @@ import org.springframework.util.StringUtils; * @author Alen Turkovic * @author Sascha Woo * @author Ted Liang + * @author Jean-Baptiste Nizet */ public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware { @@ -905,8 +906,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati } } - if (searchQuery.getHighlightFields() != null) { - HighlightBuilder highlightBuilder = new HighlightBuilder(); + if (searchQuery.getHighlightFields() != null || searchQuery.getHighlightBuilder() != null) { + HighlightBuilder highlightBuilder = searchQuery.getHighlightBuilder(); + if (highlightBuilder == null) { + highlightBuilder = new HighlightBuilder(); + } for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) { highlightBuilder.field(highlightField); } @@ -934,11 +938,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati } private SearchResponse getSearchResponse(SearchRequestBuilder requestBuilder) { - + if (QUERY_LOGGER.isDebugEnabled()) { QUERY_LOGGER.debug(requestBuilder.toString()); } - + return getSearchResponse(requestBuilder.execute()); } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java index 59050c8fe..a54b80111 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2017 the original author or authors. + * Copyright 2013-2018 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. @@ -32,6 +32,7 @@ import java.util.Arrays; * @author Rizwan Idrees * @author Mohsin Husen * @author Artur Konczak + * @author Jean-Baptiste Nizet */ public class NativeSearchQuery extends AbstractQuery implements SearchQuery { @@ -41,6 +42,7 @@ public class NativeSearchQuery extends AbstractQuery implements SearchQuery { private final List scriptFields = new ArrayList<>(); private List facets; private List aggregations; + private HighlightBuilder highlightBuilder; private HighlightBuilder.Field[] highlightFields; private List indicesBoost; @@ -67,6 +69,15 @@ public class NativeSearchQuery extends AbstractQuery implements SearchQuery { this.highlightFields = highlightFields; } + public NativeSearchQuery(QueryBuilder query, QueryBuilder filter, List sorts, + HighlightBuilder highlighBuilder, HighlightBuilder.Field[] highlightFields) { + this.query = query; + this.filter = filter; + this.sorts = sorts; + this.highlightBuilder = highlighBuilder; + this.highlightFields = highlightFields; + } + public QueryBuilder getQuery() { return query; } @@ -79,6 +90,11 @@ public class NativeSearchQuery extends AbstractQuery implements SearchQuery { return sorts; } + @Override + public HighlightBuilder getHighlightBuilder() { + return highlightBuilder; + } + @Override public HighlightBuilder.Field[] getHighlightFields() { return highlightFields; diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java index 2c39ccdf6..4326fb441 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java @@ -37,6 +37,7 @@ import org.springframework.data.elasticsearch.core.facet.FacetRequest; * @author Mark Paluch * @author Alen Turkovic * @author Sascha Woo + * @author Jean-Baptiste Nizet */ public class NativeSearchQueryBuilder { @@ -46,6 +47,7 @@ public class NativeSearchQueryBuilder { private List sortBuilders = new ArrayList<>(); private List facetRequests = new ArrayList<>(); private List aggregationBuilders = new ArrayList<>(); + private HighlightBuilder highlightBuilder; private HighlightBuilder.Field[] highlightFields; private Pageable pageable = Pageable.unpaged(); private String[] indices; @@ -90,6 +92,11 @@ public class NativeSearchQueryBuilder { return this; } + public NativeSearchQueryBuilder withHighlightBuilder(HighlightBuilder highlightBuilder) { + this.highlightBuilder = highlightBuilder; + return this; + } + public NativeSearchQueryBuilder withHighlightFields(HighlightBuilder.Field... highlightFields) { this.highlightFields = highlightFields; return this; @@ -162,7 +169,7 @@ public class NativeSearchQueryBuilder { public NativeSearchQuery build() { NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder, filterBuilder, sortBuilders, - highlightFields); + highlightBuilder, highlightFields); nativeSearchQuery.setPageable(pageable); nativeSearchQuery.setTrackScores(trackScores); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java index 754c2c551..2e6487760 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2016 the original author or authors. + * Copyright 2013-2018 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. @@ -29,6 +29,7 @@ import org.springframework.data.elasticsearch.core.facet.FacetRequest; * @author Rizwan Idrees * @author Mohsin Husen * @author Artur Konczak + * @author Jean-Baptiste Nizet */ public interface SearchQuery extends Query { @@ -43,6 +44,8 @@ public interface SearchQuery extends Query { List getAggregations(); + HighlightBuilder getHighlightBuilder(); + HighlightBuilder.Field[] getHighlightFields(); List getIndicesBoost(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java index c2c44ee72..45c89253c 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -77,6 +77,7 @@ import static org.springframework.data.elasticsearch.utils.IndexBuilder.*; * @author Ilkang Na * @author Alen Turkovic * @author Sascha Woo + * @author Jean-Baptiste Nizet */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:elasticsearch-template-test.xml") @@ -1415,6 +1416,88 @@ public class ElasticsearchTemplateTests { }); } + @Test // DATAES-479 + public void shouldHonorTheHighlightBuilderOptions() { + + // given + String documentId = randomNumeric(5); + String actualMessage = "some test message with unsafe