- Plain highlighting
当没有其他选择时,统一使用这种模式。它在内存中创建一个很小的索引,并通过Lucene的查询执行计划重新运行原来的查询条件,以访问当前文档上的低级匹配信息。对于每个需要突出显示的字段和文档,都要重复此操作。Plain highlighting高亮显示器就是这种模式。
注意:对于大型文本,Plain highlighting显示器可能需要大量的时间消耗和内存。为了防止这种情况,在下一个Elasticsearch中,对要分析的文本字符的最大数量将限制在100万。6.x版本默认无限制,但是可以使用索引设置参数index.highlight.max_analyzed_offset为特定索引设置。
7.3 高亮显示配置项
高亮显示的全局配置会被字段级别的覆盖。
- boundary_chars
设置边界字符串集合,默认包含:.,!? \t\n
- boundary_max_scan
扫描边界字符。默认为20
- boundary_scanner
指定如何分解高亮显示的片段,可选值为chars、sentence、word
- chars
字符。使用由bordery_chars指定的字符作为高亮显示边界。通过boundary_max_scan控制扫描边界字符的距离。该扫描方式只适用于fast vector highlighter。
- sentence
句子,使用Java的BreakIterator确定的下一个句子边界处的突出显示片段。您可以使用boundary_scanner_locale指定要使用的区域设置。unified highlighter高亮器默认行为。
- word
单词,由Java的BreakIterator确定的下一个单词边界处高亮显示的片段。
- boundary_scanner_locale
区域设置。该参数采用语言标记的形式,例如。“en - us”、“- fr”、“ja-JP”。更多信息可以在Locale语言标记文档中找到。默认值是local . root。
- encoder
指示代码段是否应该编码为HTML:默认(无编码)或HTML (HTML-转义代码段文本,然后插入高亮标记)。
- fields
指定要检索高亮显示的字段,支持通配符。例如,您可以指定comment_*来获得以comment_开头的所有文本和关键字字段的高亮显示。
注意:当您使用通配符时,只会匹配text、keyword类型字段。
- force_source
是否强制从_source高亮显示,默认为false。其实默认情况就是根据源字段内容(_source)内容高亮显示,即使字段是单独存储的。
- fragmenter
指定如何在高亮显示代码片段中拆分文本:可选值为simple、span。仅适用于Plain highlighting。默认为span。
- simple
将文本分成大小相同的片段。
- span
将文本分割成大小相同的片段,但尽量避免在突出显示的术语之间分割文本。这在查询短语时很有用。
- fragment_offset
控制开始高亮显示的margin(空白),仅适用于fast vector highlighter。
- fragment_size
高亮显示的片段,默认100。
- highlight_query
高亮显示匹配搜索查询以外的查询。如果您使用rescore查询,这尤其有用,因为默认情况下高亮显示并不会考虑这些查询。通常,应该将搜索查询包含在highlight_query中。
- matched_fields
组合多个字段上的匹配项以突出显示单个字段。对于以不同方式分析相同字符串的多个字段,这是最直观的。所有matched_fields必须将term_vector设置为with_positions_offset,但是只加载匹配项组合到的字段,所以建议该字段store设置为true。只适用于fast vector highlighter荧光笔。
- no_match_size
如果没有要高亮显示的匹配片段,则希望从字段开头返回的文本数量。默认值为0(不返回任何内容)。
- number_of_fragments
返回的高亮显示片段的最大数量。如果片段的数量设置为0,则不返回片段。默认为5。
- order
该值默认为none,按照字段的顺序返回高亮文档,可以设置为score(按相关性排序)。
- phrase_limit
控制要考虑的文档中匹配短语的数量。防止fast vector highlighter分析太多的短语和消耗太多的内存。在使用matched_fields时,将考虑每个匹配字段的phrase_limit短语。提高限制会增加查询时间并消耗更多内存。只支持fast vector highlighter。默认为256。
- pre_tags
用于高亮显示HTML标签,与post_tags一起使用,默认用_高亮显示文本_。
- post_tags
用于高亮显示HTML标签,与pre_tags一起使用,默认用_高亮显示文本_。
- require_field_match
默认情况下,只有包含查询匹配的字段才会高亮显示。将require_field_match设置为false以突出显示所有字段。默认值为true。
- tags_schema
定义高亮显示样式,例如_。_
- type
指定高亮显示器,可选值:unified、plain、fvh。默认值为unified。
7.4 高亮显示demo
public static void testSearch_highlighting() {
RestHighLevelClient client = EsClient.getClient();
try {
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(“map_highlighting_01”);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(
// QueryBuilders.matchAllQuery()
QueryBuilders.termQuery(“context”, “身份证”)
);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field(“context”);
sourceBuilder.highlighter(highlightBuilder);
searchRequest.source(sourceBuilder);
System.out.println(client.search(searchRequest, RequestOptions.DEFAULT));
} catch (Exception e) {
// TODO: handle exception
}
}
其返回值如下:
{
“took”:2,
“timed_out”:false,
“_shards”:{
“total”:5,
“succ