美文网首页Spring-Boot
elasticsearch之十七springboot测试文档高亮

elasticsearch之十七springboot测试文档高亮

作者: Java及SpringBoot | 来源:发表于2020-04-01 10:39 被阅读0次

个人专题目录](https://www.jianshu.com/p/140e2a59db2c)


1. elasticsearch高亮(highlight search)

1.1 高亮介绍

许多应用都倾向于在每个搜索结果中 高亮 显示搜索的关键词,比如字体的加粗,改变字体的颜色等.以便让用户知道为何该文档符合查询条件。在 Elasticsearch 中检索出高亮片段也很容易。

高亮显示需要一个字段的实际内容。 如果该字段没有被存储(映射mapping没有将存储设置为 true),则加载实际的_source,并从_source中提取相关的字段。

在 Elasticsearch 中检索出高亮片段很容易。

再次执行前面的查询,并增加一个新的 highlight 参数:

POST /book-index/_search
{
  "from": 0,
  "size": 100,
  "query": {
    "match": {
      "title": {
        "query": "三星",
        "operator": "OR",
        "prefix_length": 0,
        "max_expansions": 50,
        "fuzzy_transpositions": true,
        "lenient": false,
        "zero_terms_query": "NONE",
        "auto_generate_synonyms_phrase_query": true,
        "boost": 1
      }
    }
  },
  "highlight": {
    "pre_tags": [
      "<b><font color=red>"
    ],
    "post_tags": [
      "</font></b>"
    ],
    "require_field_match": false,
    "fields": {
      "title": {}
    }
  }
}

当执行该查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight 的部分。这个部分包含了 about 属性匹配的文本片段,并以 HTML 标签 <em></em> 封装:

可以看到,除了从ES中得到标准信息以外,还有一个新命名的highlight的部分。这里ES使用<em>的这HTML标签作为highlight部分的开始,使用<//em>标识其结束。

1.2 高亮使用

highlight参数:

下面的参数可以改变返回的结果。即可以为单独的字段设置不同的参数,也可以作为 highlight 的属性统一定义。

number_of_fragments
fragment 是指一段连续的文字。返回结果最多可以包含几段不连续的文字。默认是5。

fragment_size
某字段的值,长度是1万,但是我们一般不会在页面展示这么长,可能只是展示一部分。设置要显示出来的fragment文本判断的长度,默认是100

noMatchSize

搜索出来的这个文档这个字段已经显示出高亮的情况,可是其它字段并没有任何显示,设置这个属性可以显示出来。

pre_tags
标记 highlight 的开始标签。例如上面的<em>。

post_tags
标记 highlight 的结束标签。例如上面的</em>。

@Override
public void highLightQuery(String indexName, String field, String keyword, Integer fragmentSize, Integer numOfFragments,Integer noMatchSize) throws Exception {
    //条件
    MatchQueryBuilder queryBuilder = new MatchQueryBuilder(field, keyword);
    // 高亮设置
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.requireFieldMatch(false).field(field)
            .preTags("<b><font color=red>")
            .postTags("</font></b>");
    highlightBuilder.fragmentSize(fragmentSize);
    highlightBuilder.numOfFragments(numOfFragments);
    highlightBuilder.noMatchSize(noMatchSize);
    baseQuery.builder(indexName, queryBuilder, highlightBuilder);
}
@Test
public void testHighLightQuery() throws Exception {
    //20 2 150
    highLightQuery.highLightQuery(Constants.INDEX_NAME, "title", "三星", null, null, null);
}

相关文章

网友评论

    本文标题:elasticsearch之十七springboot测试文档高亮

    本文链接:https://www.haomeiwen.com/subject/asdouhtx.html