[英]Surrounding multiple words with tags - ElasticSearch Highlighter in Java
使用突出顯示執行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();
我試圖從邊界字符中刪除空格 :
Map<String, Object> highlighterOptions = new HashMap<>();
highlighterOptions.put("boundary_chars", "s.,!?\\t\\n");
但是,結果是一樣的。
謝謝
弗拉基米爾
我發現了什么問題。 我使用普通熒光筆而不是快速矢量熒光筆 。 只需添加快速矢量熒光筆解決了我的問題。
為了啟用快速矢量熒光筆 ,我添加了我執行搜索的類型的特定映射 。
確切地說,我補充道
.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.");
}
關於該主題的一些信息: 鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.