ElasticsSearch——HighLights

来源:互联网 发布:淘宝买dota2饰品封号 编辑:程序博客网 时间:2024/05/18 00:57

ES可以使用三种类型的高亮:

  • the lucene highlighter  
  • fast-vector-highlighter 
  • postings-highlighte


高亮显示的前提要求:

1.高亮的字段是存储的,store set to true 

2.如果前提1不满足,会从source中提取,但是必须保证 source set to enable

3._all 字段 比较特殊,不能从source中获得,也就是说如果要高亮_all字段内容 必须 保证 字段的属性 store set to true 


the lucene highlighter  

这是默认的标准高亮方式。不需要在索引的时候进行任何额外的配置。

也就是说如果在mapping的部分没有对字段进行额外的配置,默认进行的是标准高亮,而且也无法通过在高亮的时候进行配置而转化成其他的高亮方式。

优缺点:

1.无需额外配置

2.会高亮很多无用的词条,不匹配的内容也会被高亮。


fast-vector-highlighter 

这种高亮方式基于词条向量,在mapping的时候需要 set term_vector to with_positions_offsets

优缺点:

1.对于超过1MB的字段 速度非常快

2. 会增大索引的大小

3. 可以对不同的匹配方式分配不同的权重

在mapping部分需要设置如下

{    "type_name" : {        "content" : {"term_vector" : "with_positions_offsets"}    }}


注意哦!这样的配置 在进行 创建索引的时候需要使用 post 方式,不配置这些参数信息则使用put也可以实现的。

当进行上面的配置之后,默认的高亮就会使用fast-vector-highlighter 这种方式,但是如果想要使用标准的高亮方式,可以进行高亮的时候如下配置:


{    "query" : {...},    "highlight" : {        "fields" : {            "content" : {"type" : "plain"}        }    }}

postings-highlighter

这种高亮是基于偏移量的:需要在mapping的时候 set index_options to offset

1.因为不会二次分词文本内容,所以高亮速度比较快,文档越大效果越明显

2.需要更小的磁盘空间相对fast highlight

3.把文档当成一个完整的语料,使用的是BM25算法

4.使用该高亮方法 fragment_size 属性失效,输出的高亮片段会忽略长度(所以如果字段内容过多的话,可以使用term vector的高亮方式,将两种高亮方式结合使用)

mapping 部分需要配置如下:

{    "type_name" : {        "content" : {"index_options" : "offsets"}    }}

注意哦!这种高亮 会忽略位置,比较适合简单的词条匹配。也就是说高亮的内容不一定是你匹配的地方。

如果你采用的是match_phase方式,虽然有些词条包含在里面但是没有匹配得分也会被高亮。

这种高亮也可以通过配置同上 来使用标准高亮的方式








0 0