使用突出显示执行ElasticSearchs查询时,是否可以使用突出显示标记包围多个单词?
例如,当我执行查询“ajax basics”时,我得到:
someText... <a href='#' class='highlightedTerm'>ajax</a> <a href='#' class='highlightedField'>basics</a> someText...
这就是我想要的:
someText... <a href='#' class='highlightedTerm'>ajax basics</a> someText...
我正在使用这些设置进行荧光笔和查询:
SearchResponse response = getClient().prepareSearch("user")
.setTypes("document")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setPostFilter(privacyFilter)
.setQuery(qb)
.setFrom(first)
.setSize(pageSize)
.setExplain(true)
//
// Highlight
.addHighlightedField("fileName")
.addHighlightedField("content")
.setHighlighterOptions(highlighterOptions)
.setHighlighterPreTags("<a href='#' class='highlightedTerm'>")
.setHighlighterPostTags("</a>")
// -------------------------------------
//
.addFields("*", "_source")
.execute()
.actionGet();
我试图从边界字符中删除 space :
Map<String, Object> highlighterOptions = new HashMap<>();
highlighterOptions.put("boundary_chars", "s.,!?\\t\\n");
但是,结果是一样的。
由于
弗拉基米尔
答案 0 :(得分:2)
我发现了什么问题。我使用普通荧光笔而不是快速矢量荧光笔。只需添加快速矢量荧光笔即可解决我的问题。
要启用快速矢量荧光笔,我为我执行搜索的类型添加了特定的映射。
准确地说,我添加了
.field("term_vector", "with_positions_offsets")
在我想要突出显示的字段上。
// Create mapping
XContentBuilder xb = XContentFactory.jsonBuilder()
.startObject()
.startObject("document")
// - document
.startObject("properties")
// - properties
//
.startObject("content")
.field("type", "string")
.field("term_vector", "with_positions_offsets")
.endObject()
//
//
.startObject("contentType")
.field("type", "string")
.endObject()
//
//
.startObject("fileName")
.field("type", "string")
.endObject()
//
//
.startObject("fileSize")
.field("type", "long")
.endObject()
//
//
.startObject("openable")
.field("type", "string")
.endObject()
//
//
.startObject("ownerUserId")
.field("type", "string")
.endObject()
//
//
.startObject("privacy")
.field("type", "string")
.endObject()
//
//
.startObject("searchable")
.field("type", "string")
.endObject()
//
// - end properties
.endObject()
// - end document
.endObject()
.endObject();
// Prepare mapping
PutMappingRequestBuilder pmrb = client.admin().indices()
.preparePutMapping("user")
.setType("document");
pmrb.setSource(xb);
// Create type and mapping
PutMappingResponse response = pmrb.execute().actionGet();
if (!response.isAcknowledged()) {
LOG.info("Error while creating mapping for user document.");
} else {
LOG.info("Mapping created for user document.");
}
有关该主题的一些信息:link