我正在使用Java API for ElasticSearch。我试图突出我的领域,但它不起作用。正在返回与搜索词匹配的正确结果,因此有内容要突出显示,但它根本不会这样做。我将SearchResponse和HighlightBuilder设置为:
QueryBuilder matchQuery = simpleQueryStringQuery(searchTerm);
...
HighlightBuilder highlightBuilder = new HighlightBuilder()
.postTags("<highlight>")
.preTags("</highlight>")
.field("description");
SearchResponse response = client.prepareSearch("mediaitems")
.setTypes("mediaitem")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(matchQuery) // Query
.setFrom(from)
.setSize(pageSize)
.setExplain(true)
.highlighter(highlightBuilder)
.get();
在我的JSON-&gt; POJO代码中,我检查哪些字段已突出显示,但返回的地图为空。
Arrays.stream(hits).forEach((SearchHit hit) -> {
String source = hit.getSourceAsString();
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
try {
MediaItem mediaItem = objectMapper.readValue(source, MediaItem.class);
mediaItemList.add(mediaItem);
} catch (IOException e) {
e.printStackTrace();
}
});
为什么我的突出显示请求会被忽略?
非常感谢任何帮助。
答案 0 :(得分:0)
您必须在HighlightBuilder中设置突出显示的字段。
例如:
HighlightBuilder.Field field = new HighlightBuilder.Field(fieldName);
highlightBuilder.field(field);
我看到您使用简单的查询字符串查询,因此您可以执行以下操作:
Your query string: fieldname: searched text
例如,您的查询字符串如下:
price: >2000 && city: Manchaster
使用此查询字符串,您也可以在查询中指定字段。 现在荧光笔应该可以工作。