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 74702a998..17b186ef9 100755
--- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
+++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
@@ -106,6 +106,7 @@ import static org.springframework.util.CollectionUtils.isEmpty;
* @author Oliver Gierke
* @author Mark Janssen
* @author Mark Paluch
+ * @author Sascha Woo
*/
public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
@@ -875,9 +876,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati
}
if (searchQuery.getHighlightFields() != null) {
+ HighlightBuilder highlightBuilder = new HighlightBuilder();
for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
- searchRequest.highlighter(new HighlightBuilder().field(highlightField));
+ highlightBuilder.field(highlightField);
}
+ searchRequest.highlighter(highlightBuilder);
}
if (!isEmpty(searchQuery.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 30918ba3e..387ad02bb 100755
--- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java
@@ -33,6 +33,7 @@ import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptType;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
+import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.hamcrest.Matchers;
@@ -70,6 +71,7 @@ import static org.springframework.data.elasticsearch.utils.IndexBuilder.*;
* @author Abdul Mohammed
* @author Kevin Leturc
* @author Mason Chan
+ * @author Sascha Woo
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
@@ -1206,6 +1208,58 @@ public class ElasticsearchTemplateTests {
assertThat(sampleEntities.getContent().get(0).getHighlightedMessage(), is(highlightedMessage));
}
+ @Test // DATAES-412
+ public void shouldReturnMultipleHighlightFields() {
+
+ // given
+ String documentId = randomNumeric(5);
+ String actualType = "some test type";
+ String actualMessage = "some test message";
+ String highlightedType = "some test type";
+ String highlightedMessage = "some test message";
+
+ SampleEntity sampleEntity = SampleEntity.builder()
+ .id(documentId)
+ .type(actualType)
+ .message(actualMessage)
+ .version(System.currentTimeMillis())
+ .build();
+
+ IndexQuery indexQuery = getIndexQuery(sampleEntity);
+
+ elasticsearchTemplate.index(indexQuery);
+ elasticsearchTemplate.refresh(SampleEntity.class);
+
+ SearchQuery searchQuery = new NativeSearchQueryBuilder()
+ .withQuery(
+ boolQuery()
+ .must(termQuery("type", "test"))
+ .must(termQuery("message", "test")))
+ .withHighlightFields(
+ new HighlightBuilder.Field("type"),
+ new HighlightBuilder.Field("message"))
+ .build();
+
+ // when
+ elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class, new SearchResultMapper() {
+ @Override
+ public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) {
+ for (SearchHit searchHit : response.getHits()) {
+ Map highlightFields = searchHit.getHighlightFields();
+ HighlightField highlightFieldType = highlightFields.get("type");
+ HighlightField highlightFieldMessage = highlightFields.get("message");
+
+ // then
+ assertNotNull(highlightFieldType);
+ assertNotNull(highlightFieldMessage);
+ assertThat(highlightFieldType.fragments()[0].toString(), is(highlightedType));
+ assertThat(highlightFieldMessage.fragments()[0].toString(), is(highlightedMessage));
+ }
+ return null;
+ }
+ });
+ }
+
@Test
public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery() {
// given