43.什么是高亮查询?ES如何实现高亮查询?Java如何实现高亮显示?嘻哈的简写笔记——Elastic Search

1.什么是高亮查询?ES如何实现高亮查询?

高亮查询就是把查询到的关键词以显著的颜色标识出来,在百度,京东上很多地方都可以看到;
ES有默认的高亮查询插件;非常的方便;
高亮查询就是你用户输入的关键字,以一定的特殊样式展示给用户,让用户知道为什么这个结果被检索出来。高亮展示的数据,本身就是文档中的一个Field,单独将Field以highlight的形式返回给你
ES提供了一个highlight属性,和query同级别的

fragment_size:指定高亮数据展示多少个字符回来。
pre_tags:指定前缀标签,举个栗子< font color="red" >
post_tags:指定后缀标签,举个栗子< /font >
fields:指定哪几个(字段)Field以高亮形式返回

既然ES很支持高亮显示,那么他是如何进行实现的呢?其实也非常简单,他就是让你在拿到搜索结果的时候在,搜索结果里面放入Html的颜色标签,这样,你就可以,在web页面上看到高亮显示了
至于怎么放颜色标签,就通过前缀pre_tags:前缀标签post_tags:后缀标签

POST /book/novel/_search
{
  "query": {
    "match": {
      "desc": "好书"
    }
  },
  "highlight": {
    "fields": {
      "desc": {}
    },
    "pre_tags": "<font color = 'red'>",
    "post_tags": "</font>",
    "number_of_fragments": 5
  }
}

解释:这是对desc字段进行匹配查询”好书”这个关键字;highlight:{} 里面来设置高亮的词语;fields:{}用来设置需要进行高亮的字段
查询结果,他会显示两个结果;一个是正常的结果,然后你要显示高亮的部分他会他别给你展示出来;

{
        "_index" : "book",
        "_type" : "novel",
        "_id" : "1001",
        "_score" : 0.26706278,
        "_source" : {
          "id" : 1001,
          "name" : "金瓶梅",
          "author" : "任凯",
          "count" : 100,
          "price" : 200,
          "pubdate" : "2020-11-26 09:18:19",
          "desc" : "人生好书"
        },
        "highlight" : {
          "desc" : [
            "人生<font color = 'red'>好</font><font color = 'red'>书</font>"
          ]
        }
      }

2.Java如何实现高亮显示?

@Test //高亮显示
public void test23() throws IOException {
    //1. SearchRequest
    SearchRequest request = new SearchRequest(indextName);
    request.types(typeName);

    //2. 指定查询条件(高亮)
    SearchSourceBuilder builder = new SearchSourceBuilder();
    //2.1 指定查询条件
    builder.query(QueryBuilders.matchQuery("desc", "好书"));
    //2.2 指定高亮
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.field("desc", 5)//传入要高亮哪一个字段,并且高亮几个字
            .preTags("<font color='red'>")  //传入前缀
            .postTags("</font>");//传入后缀
    builder.highlighter(highlightBuilder);
    request.source(builder);

    //3. 执行查询
    SearchResponse resp = ClientUtils.client().search(request, RequestOptions.DEFAULT);

    //4. 获取高亮数据,输出
    for (SearchHit hit : resp.getHits().getHits()) {  //因为高亮数据是在碰撞数据里面的,所以要两个getHits()
        //获取普通数据是无法获取到高亮数据的
        System.out.println(hit.getHighlightFields().get("desc"));//获取碰撞数据的高亮字段
    }
}

。。。。。。。。。。。。。

嘻哈的简写笔记

。。。。。。。。。。。。。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值