2
我測試了彈性搜索高亮領域的功能,它工作正常。我用彈性搜索2.4.4和彈簧數據elasticsearch-2.0.0.RELEASE彈性搜索5.5高光領域不工作
的示例代碼是在後下
How to provide highlighting with Spring data elasticsearch
我最近升級爲彈性搜索到5.5.0和spring-data-elasticsearch-3.0.0.M4
當我測試相同的代碼時,高亮做n OT發生
下面是示例代碼
SearchQuery searchQuery = new NativeSearchQueryBuilder().withIndices("occindex")
.withPageable(new PageRequest(0, mySpecification.getNoOfRecords()))
.withQuery(QueryBuilders.multiMatchQuery(
searchText.toLowerCase()).field("transformedTitle", 10.0f).
minimumShouldMatch("50%").fuzziness(Fuzziness.ONE).prefixLength(3)
.field("transformedDesription").type(MultiMatchQueryBuilder.Type.BEST_FIELDS))
.withHighlightFields(
new HighlightBuilder.Field("transformedTitle").preTags("<span style='background-color: #FFFF00'>")
.postTags("</span>"),
new HighlightBuilder.Field("transformedDesription").fragmentSize(250).numOfFragments(3)
.preTags("<span style='background-color: #FFFF00'>").postTags("</span>"))
.build();
Page<MyResultRecord> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,
MyResultRecord.class, new SearchResultMapper() {
@Override
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
List<MyResultRecord> chunk = new ArrayList<MyResultRecord>();
for (SearchHit searchHit : response.getHits()) {
if (response.getHits().getHits().length <= 0) {
return null;
}
MyResultRecord myResultRecord = new MyResultRecord();
myResultRecord.setRecordId(searchHit.getId());
Map<String, Object> source = searchHit.getSource();
myResultRecord.setRisk((String) source.get("actualRisk"));
String highlightedTitle = null;
System.out.println(" Check the highlighted fileds " + searchHit.getHighlightFields());
System.out.println(" Is this null ?? " + searchHit.getHighlightFields().get("transformedTitle"));
if (searchHit.getHighlightFields().get("transformedTitle") != null)
highlightedTitle = searchHit.getHighlightFields().get("transformedTitle").fragments()[0]
.toString();
else
highlightedTitle = (String) source.get("transformedTitle");
myResultRecord.setHighlightedTitle(highlightedTitle);
myResultRecord.setScore(searchHit.getScore());
chunk.add(myResultRecord);
}
if (chunk.size() > 0) {
return new AggregatedPageImpl(chunk);
}
return null;
}
});
有沒有爲了突出在彈性搜索5.5.0領域需要更改任何代碼?
當我打印在彈性搜索日誌查詢,我發現只有一個亮點場被傳遞到彈性搜索
{
"from":0,
"size":2,
"query":{
"multi_match":{
"query":" My Query String",
"fields":[
"transformedDesription^1.0",
"transformedTitle^1.0"
],
"type":"best_fields",
"operator":"OR",
"slop":0,
"prefix_length":0,
"max_expansions":50,
"lenient":false,
"zero_terms_query":"NONE",
"boost":1.0
}
},
"highlight":{
"fields":{
"transformedDesription":{
"pre_tags":[
"<bold>"
],
"post_tags":[
"</bold>"
]
}
}
}
}
當我調試,我觀察到NativeSearchQuery有兩個突出顯示的字段,但最終發送給Elastic Search的查詢僅請求一個突出顯示字段。
您可以添加當前的mappin G ? – dadoonet
更新了問題 – lives
聽起來像一個,但在Spring中將高亮部分翻譯爲JSON。你有什麼機會可以展示生成的JSon是什麼?可能在elasticsearch方面用slowqueries調試? – dadoonet