Elasticsearch Search API之(Request Body Search 查询主体)

本文详细介绍了Elasticsearch的Search API中的Request Body Search查询,特别是高亮显示功能。高亮显示可以使用不同的边界策略和配置,如plain、sentence和word。此外,文章还探讨了滚动查询、重打分机制和字段折叠等高级搜索特性,这些特性在处理大量数据和优化搜索结果时非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值