Java弹性搜索:荧光笔不工作
问题描述:
我正在使用Java API for ElasticSearch。我试图强调我的领域,但它不工作。与搜索字词相匹配的正确结果正在返回,因此需要突出显示的内容,但它不会执行此操作。我把我的SearchResponse和HighlightBuilder这样的:Java弹性搜索:荧光笔不工作
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-> 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();
}
});
为什么我的突出显示请求被忽略?
任何帮助,非常感谢。
答
您必须在HighlightBuilder中设置突出显示的字段。
例如:
HighlightBuilder.Field field = new HighlightBuilder.Field(fieldName);
highlightBuilder.field(field);
我看见你正在使用简单的查询字符串查询,这样你就可以做到以下几点:
Your query string: fieldname: searched text
因此,例如,您的查询字符串如下:
price: >2000 && city: Manchaster
使用此查询字符串,您也可以在查询中指定字段。 现在荧光笔应该工作。
在QueryBuilder中没有地方使用HighlightBuilder。 https://github.com/elastic/elasticsearch/blob/master/core/src/main/java/org/elasticsearch/index/query/QueryBuilder.java –
是的,你是对的 - 你误会了我。我要编辑我的asnwer。 – Ansaldos