阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Elasticsearch 2.20 高亮显示

130次阅读
没有评论

共计 3981 个字符,预计需要花费 10 分钟才能阅读完成。

Elasticsearch 中的高亮显示是来源于 lucene 的功能,他允许在一个或者多个字段上突出显示搜索内容,lucene 支持三种高亮显示方式 highlighter, fast-vector-highlighter,postings-highlighter,第一种是默认的标准类型。下面先看一个实例,在搜索前,先增加一条文档。

请求:PUT http://localhost:9200/secilog/log/10?pretty

参数:

{
“type”:”file”,
“message”:”secilog is a log real-time analyse software,it’s full text search is based on Elasticsearch “
}

文档创建好后,我们在进行高亮搜索:

请求:POST http://localhost:9200/secilog/log/_search?pretty

参数:

{
    “query”: {
        “term”: {
            “message”: “analyse”
        }
    },
    “highlight”: {
        “fields”: {
            “message”: {}
        }
    }
}

返回结果如下:

{
  “took” : 1,
  “timed_out” : false,
  “_shards” : {
    “total” : 1,
    “successful” : 1,
    “failed” : 0
  },
  “hits” : {
    “total” : 1,
    “max_score” : 0.4232868,
    “hits” : [{
      “_index” : “secilog”,
      “_type” : “log”,
      “_id” : “10”,
      “_score” : 0.4232868,
      “_source” : {
        “type” : “file”,
        “message” : “secilog is a log real-time analyse software,it’s full text search is based on Elasticsearch “
      },
      “highlight” : {
        “message” : [“secilog is a log real-time <em>analyse</em> software,it’s full text search is based on Elasticsearch ”]
      }
    } ]
  }
}
 

    从结果中可以看出,有高亮显示的内容,<em>analyse</em>。为了执行高亮显示,该字段必须有实际的内容。并且这个字段必须进程存储,就是在字段映射中 store 的值必须为 ture,不能只在内存中。否则系统会自动加载_source 字段并匹配相关的列。字段名称支持通配符符号,例如可以用 ”message*”: {} 参数匹配所有 message 开头的字段。
 
fast-vector-highlighter

    前面的高亮显示是普通的高亮显示,lucene 还支持 fast-vector-highlighter 高亮显示,fast-vector-highlighter 高亮显示具有如下特点:

•快,特别是内容别大的字段,比如大于 1M。

•可定制的 boundary_chars,boundary_max_scan,和 fragment_offset。

•需要设置 term_vector 的值为 with_positions_offsets,增加索引的大小。

•可以将多个字段的匹配组合成一个结果。

•可以分配不同的权重匹配在不同的位置上,

    Elasticsearch 中需要在建立索引的时候映射字段类型,才可以实现 postings-highlighter 高亮显示,例如对 content 字段采用 fast-vector 高亮类型:

{
    “type_name” : {
        “content” : {“type”:”string”,”term_vector” : “with_positions_offsets”}
    }
}
 

 
postings-highlighter

    lucene 还支持 postings-highlighter 高亮显示,postings-highlighter 高亮显示具有如下特点:

•快,因为它不需要重新分析文档:尤其是对大文件对性能的提高更为明显。

•占用更少的磁盘空间。

•把高亮显示和句子分开,这个更有利于人类的阅读。

•使用 BM25 算法,使搜索的时候像是整篇文档。

    Elasticsearch 中需要在建立索引的时候映射字段类型,才可以实现 postings-highlighter 高亮显示,例如对 content 字段采用 postings 高亮类型:

{
    “type_name” : {
        “content” : {“type”:”string”,”index_options” : “offsets”}
    }
}
 

备注:高亮查询不支持复杂的查询,比如查询类型设置为 match_phrase_prefix 的查询。

    对于后两种特殊的类型,都会增加索引的大小,但对于高亮显示查询的执行时间会减少。

    使用 type 字段可以强制使用特定的高亮类型,当设置了 term_vectors 高亮类型的时候,想用普通高亮显示的时候非常有用。这个只有三中类型,plain, postings,fvh 分别对应高亮显示的三种类型,例如:

{
    “query” : {…},
    “highlight” : {
        “fields” : {
            “content” : {“type” : “plain”}
        }
    }}
 

默认高亮显示 html 标记

默认情况下,高亮显示的文本在 <em> 和 </em> 中。这可以通过设置 pre_tags 和 post_tags 进行修改,例如:

{
    “query” : {…},
    “highlight” : {
        “pre_tags” : [“<b>”],
        “post_tags” : [“</b>”],
        “fields” : {
            “_all” : {}
        }
    }}

使用快速矢量记号可以有多个标签,按照“重要性”进行排序,例如:

{
    “query” : {…},
    “highlight” : {
        “pre_tags” : [“<tag1>”, “<tag2>”],
        “post_tags” : [“</tag1>”, “</tag2>”],
        “fields” : {
            “_all” : {}
        }
    }
}

  系统对于这种情况有默认的多个 pre_tags,需要设置 tags_schema 为 styled,默认 post_tags 为 </em>,默认多个 pre_tags 标签为:

<em class=”hlt1″>, <em class=”hlt2″>, <em class=”hlt3″>,<em class=”hlt4″>, <em class=”hlt5″>, <em class=”hlt6″>,<em class=”hlt7″>, <em class=”hlt8″>, <em class=”hlt9″>,<em class=”hlt10″>
 

  当我们需要设置默认多个标签的时候的例子如下:

{
    “query” : {…},
    “highlight” : {
        “tags_schema” : “styled”,
        “fields” : {
            “content” : {}
        }
    }
}

    每个字段都可以设置高亮显示的字符片 fragment_size 段大小(默认为 100),以及返回的最大片段数 number_of_fragments(默认为 5),如果 number_of_fragments 值设置为 0 则片段产生,当 order 设置为 score 时候可以按照评分进行排序。例如:

{
    “query” : {…},
    “highlight” : {
        “order” : “score”,
        “fields” : {
            “content” : {“fragment_size” : 150, “number_of_fragments” : 3}
        }
    }
}

ElasticSearch 最新版本 2.20 发布下载了   http://www.linuxidc.com/Linux/2016-02/128166.htm

Linux 上安装部署 ElasticSearch 全程记录  http://www.linuxidc.com/Linux/2015-09/123241.htm

Elasticsearch 安装使用教程 http://www.linuxidc.com/Linux/2015-02/113615.htm

ElasticSearch 配置文件译文解析 http://www.linuxidc.com/Linux/2015-02/114244.htm

ElasticSearch 集群搭建实例  http://www.linuxidc.com/Linux/2015-02/114243.htm

分布式搜索 ElasticSearch 单机与服务器环境搭建  http://www.linuxidc.com/Linux/2012-05/60787.htm

ElasticSearch 的工作机制  http://www.linuxidc.com/Linux/2014-11/109922.htm 

使用 Elasticsearch + Logstash + Kibana 搭建日志集中分析平台实践  http://www.linuxidc.com/Linux/2015-12/126587.htm

ElasticSearch 的详细介绍 :请点这里
ElasticSearch 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-02/128420.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3981字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中