Skip to content

Commit 9c235cd

Browse files
committed
DATAES-412 - only the last highlight field is added to SearchRequest
1 parent ef1dca3 commit 9c235cd

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@
110110
* @author Mark Paluch
111111
* @author Ilkang Na
112112
* @author Alen Turkovic
113+
* @author Sascha Woo
113114
*/
114115
public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
115116

@@ -882,9 +883,11 @@ private SearchResponse doSearch(SearchRequestBuilder searchRequest, SearchQuery
882883
}
883884

884885
if (searchQuery.getHighlightFields() != null) {
886+
HighlightBuilder highlightBuilder = new HighlightBuilder();
885887
for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
886-
searchRequest.highlighter(new HighlightBuilder().field(highlightField));
888+
highlightBuilder.field(highlightField);
887889
}
890+
searchRequest.highlighter(highlightBuilder);
888891
}
889892

890893
if (!isEmpty(searchQuery.getIndicesBoost())) {

src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.elasticsearch.script.ScriptType;
3535
import org.elasticsearch.search.SearchHit;
3636
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
37+
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
3738
import org.elasticsearch.search.sort.FieldSortBuilder;
3839
import org.elasticsearch.search.sort.SortOrder;
3940
import org.hamcrest.Matchers;
@@ -74,6 +75,7 @@
7475
* @author Chris White
7576
* @author Ilkang Na
7677
* @author Alen Turkovic
78+
* @author Sascha Woo
7779
*/
7880
@RunWith(SpringJUnit4ClassRunner.class)
7981
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
@@ -1237,6 +1239,58 @@ public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz,
12371239
assertThat(sampleEntities.getContent().get(0).getHighlightedMessage(), is(highlightedMessage));
12381240
}
12391241

1242+
@Test // DATAES-412
1243+
public void shouldReturnMultipleHighlightFields() {
1244+
1245+
// given
1246+
String documentId = randomNumeric(5);
1247+
String actualType = "some test type";
1248+
String actualMessage = "some test message";
1249+
String highlightedType = "some <em>test</em> type";
1250+
String highlightedMessage = "some <em>test</em> message";
1251+
1252+
SampleEntity sampleEntity = SampleEntity.builder()
1253+
.id(documentId)
1254+
.type(actualType)
1255+
.message(actualMessage)
1256+
.version(System.currentTimeMillis())
1257+
.build();
1258+
1259+
IndexQuery indexQuery = getIndexQuery(sampleEntity);
1260+
1261+
elasticsearchTemplate.index(indexQuery);
1262+
elasticsearchTemplate.refresh(SampleEntity.class);
1263+
1264+
SearchQuery searchQuery = new NativeSearchQueryBuilder()
1265+
.withQuery(
1266+
boolQuery()
1267+
.must(termQuery("type", "test"))
1268+
.must(termQuery("message", "test")))
1269+
.withHighlightFields(
1270+
new HighlightBuilder.Field("type"),
1271+
new HighlightBuilder.Field("message"))
1272+
.build();
1273+
1274+
// when
1275+
elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class, new SearchResultMapper() {
1276+
@Override
1277+
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
1278+
for (SearchHit searchHit : response.getHits()) {
1279+
Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
1280+
HighlightField highlightFieldType = highlightFields.get("type");
1281+
HighlightField highlightFieldMessage = highlightFields.get("message");
1282+
1283+
// then
1284+
assertNotNull(highlightFieldType);
1285+
assertNotNull(highlightFieldMessage);
1286+
assertThat(highlightFieldType.fragments()[0].toString(), is(highlightedType));
1287+
assertThat(highlightFieldMessage.fragments()[0].toString(), is(highlightedMessage));
1288+
}
1289+
return null;
1290+
}
1291+
});
1292+
}
1293+
12401294
@Test
12411295
public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery() {
12421296
// given

0 commit comments

Comments
 (0)