mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-07-12 13:23:26 +00:00
DATAES-412 - only the last highlight field is added to SearchRequest
This commit is contained in:
parent
2642836e4d
commit
71b2ffc128
@ -106,6 +106,7 @@ import static org.springframework.util.CollectionUtils.isEmpty;
|
|||||||
* @author Oliver Gierke
|
* @author Oliver Gierke
|
||||||
* @author Mark Janssen
|
* @author Mark Janssen
|
||||||
* @author Mark Paluch
|
* @author Mark Paluch
|
||||||
|
* @author Sascha Woo
|
||||||
*/
|
*/
|
||||||
public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
|
public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
|
||||||
|
|
||||||
@ -875,9 +876,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (searchQuery.getHighlightFields() != null) {
|
if (searchQuery.getHighlightFields() != null) {
|
||||||
|
HighlightBuilder highlightBuilder = new HighlightBuilder();
|
||||||
for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
|
for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
|
||||||
searchRequest.highlighter(new HighlightBuilder().field(highlightField));
|
highlightBuilder.field(highlightField);
|
||||||
}
|
}
|
||||||
|
searchRequest.highlighter(highlightBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isEmpty(searchQuery.getIndicesBoost())) {
|
if (!isEmpty(searchQuery.getIndicesBoost())) {
|
||||||
|
@ -33,6 +33,7 @@ import org.elasticsearch.script.Script;
|
|||||||
import org.elasticsearch.script.ScriptType;
|
import org.elasticsearch.script.ScriptType;
|
||||||
import org.elasticsearch.search.SearchHit;
|
import org.elasticsearch.search.SearchHit;
|
||||||
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
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.FieldSortBuilder;
|
||||||
import org.elasticsearch.search.sort.SortOrder;
|
import org.elasticsearch.search.sort.SortOrder;
|
||||||
import org.hamcrest.Matchers;
|
import org.hamcrest.Matchers;
|
||||||
@ -70,6 +71,7 @@ import static org.springframework.data.elasticsearch.utils.IndexBuilder.*;
|
|||||||
* @author Abdul Mohammed
|
* @author Abdul Mohammed
|
||||||
* @author Kevin Leturc
|
* @author Kevin Leturc
|
||||||
* @author Mason Chan
|
* @author Mason Chan
|
||||||
|
* @author Sascha Woo
|
||||||
*/
|
*/
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
|
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
|
||||||
@ -1206,6 +1208,58 @@ public class ElasticsearchTemplateTests {
|
|||||||
assertThat(sampleEntities.getContent().get(0).getHighlightedMessage(), is(highlightedMessage));
|
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 <em>test</em> type";
|
||||||
|
String highlightedMessage = "some <em>test</em> 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 <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
|
||||||
|
for (SearchHit searchHit : response.getHits()) {
|
||||||
|
Map<String, HighlightField> 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
|
@Test
|
||||||
public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery() {
|
public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery() {
|
||||||
// given
|
// given
|
||||||
|
Loading…
x
Reference in New Issue
Block a user