赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 开发参考
  5. SDK参考
  6. Java SDK
  7. 多元索引
  8. 数据查询
  9. 全文检索
  10. 摘要与高亮

摘要与高亮

  • 全文检索
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

在查询数据时通过设置高亮参数,返回命中查询词的片段信息并对查询词进行高亮显示。仅Text类型字段支持查询摘要与高亮功能。

前提条件

  • 已初始化OTSClient。具体操作,请参见初始化Tablestore Client。

  • 已创建数据表并写入数据。具体操作,请参见创建数据表和写入数据。

  • 已在数据表上创建多元索引。具体操作,请参见创建多元索引。

注意事项

  • 在MatchQuery和MatchPhraseQuery中使用查询摘要与高亮功能时,查询词可能会被多个preTag、postTag高亮显示。

  • 如果Text字段的分词类型为最大语义分词,则使用MatchPhraseQuery功能进行数据查询时不支持使用查询摘要与高亮功能。

  • 分片切分可能会将文本中的查询词分割,此时该查询词可能不会被高亮。

参数

参数

说明

highlightEncoder

对高亮分片原文内容的编码方式。取值范围如下:

  • PLAIN(默认):原文展示,不进行编码。

  • HTML:对高亮分片原文进行HTML转义,转义包括<转义为&lt;、>转义为&gt;、"转义为&quot;、'转义为&#x27;、/转义为&#x2F;,网页展示时推荐使用HTML格式。

fieldHighlightParams

字段高亮参数,仅支持设置SearchQuery中包含关键词查询的字段。

HighlightParameter

numberOfFragments

返回高亮分片的最大数量,推荐设置为1。

fragmentSize

每个分片的长度。默认值100。

重要

实际返回分片的长度不会与该值严格相等。

preTag

查询词高亮的前置Tag,例如<em>、<b>。默认值为<em>,您可以按需自定义前置Tag。preTag支持的字符集包括< > " ' /、a-z、A-Z、0-9。

postTag

查询词高亮的后置Tag,例如</em>、</b>。默认值为</em>,您可以按需自定义后置Tag。postTag支持的字符集包括< > " ' /、a-z、A-Z、0-9。

highlightFragmentOrder

当高亮字段返回多个分片时,分片的排序规则。

  • TEXT_SEQUENCE(默认):片段在文本中出现的顺序。

  • SCORE:根据命中查询词评分排序多个分片。

示例

以下示例用于使用MatchQuery功能查询表中Col_Text列的值能够匹配hangzhou shanghai的数据,并在返回结果中对查询词进行高亮显示。其中Col_Text列为Text类型。

/**
 * MatchQuery查询摘要与高亮。
 */
public static void matchQueryWithHighlighting(SyncClient client) {
    SearchRequest searchRequest = SearchRequest.newBuilder()
            .tableName("<TABLE_NAME>")
            .indexName("<SEARCH_INDEX_NAME>")
            .returnAllColumnsFromIndex(true)
            .searchQuery(SearchQuery.newBuilder()
                    .limit(5)
                    .query(QueryBuilders.bool()
                            .should(QueryBuilders.match("Col_Text", "hangzhou shanghai")))
                    .highlight(Highlight.newBuilder()
                            .addFieldHighlightParam("Col_Text", HighlightParameter.newBuilder()
                                    .highlightFragmentOrder(HighlightFragmentOrder.TEXT_SEQUENCE)
                                    .preTag("<b>")
                                    .postTag("</b>")
                                    .build())
                            .build())
                    .build())
            .build();
    SearchResponse resp = client.search(searchRequest);

    // 打印查询和高亮结果。查询非嵌套类型字段时设置prefix为空即可。
    printSearchHit(resp.getSearchHits(), "");
}

/**
 * 打印searchHit内容。
 * @param searchHits searchHits
 * @param prefix Nested结构输出时,增加前缀以打印层次信息。
 */
private static void printSearchHit(List<SearchHit> searchHits, String prefix) {
    for (SearchHit searchHit : searchHits) {
        if (searchHit.getScore() != null) {
            System.out.printf("%s Score: %s\n", prefix, searchHit.getScore());
        }

        if (searchHit.getOffset() != null) {
            System.out.printf("%s Offset: %s\n", prefix, searchHit.getOffset());
        }

        if (searchHit.getRow() != null) {
            System.out.printf("%s Row: %s\n", prefix, searchHit.getRow().toString());
        }

        // 打印各字段高亮分片结果。
        if (searchHit.getHighlightResultItem() != null) {
            System.out.printf("%s Highlight: \n", prefix);
            StringBuilder strBuilder = new StringBuilder();
            for (Map.Entry<String, HighlightField> entry : searchHit.getHighlightResultItem().getHighlightFields().entrySet()) {
                strBuilder.append(entry.getKey()).append(":").append("[");
                strBuilder.append(StringUtils.join(",", entry.getValue().getFragments())).append("]\n");
            }
            System.out.printf("%s   %s", prefix, strBuilder);
        }

        System.out.println();
    }
}

相关文档

  • 关于查询摘要与高亮功能的更多信息,请参见摘要与高亮。

  • 如果要在查询嵌套类型字段时使用查询摘要与高亮功能,请参考嵌套类型查询文档。

相关文章

匹配查询 2025-04-22 14:28

MatchQuery采用近似匹配的方式查询表中的数据。表格存储会先对Text类型的列值和查询关键词按照设置好的分词器做切分,然后按照切分好后的词去查询。对于使用模糊分词的Text类型的列,建议使用MatchPhraseQuery实现高性能的模糊查询。

短语匹配查询 2025-04-22 14:28

短语匹配查询(MatchPhraseQuery)类似于匹配查询(MatchQuery),但是分词后多个词的位置关系会被考虑,只有分词后的多个词在行数据中以同样的顺序和位置存在时,才表示行数据满足查询条件。如果查询列的分词类型为模糊分词,则使用MatchPhraseQuery可以实现比Wildcard

摘要与高亮 2025-04-22 14:28

在查询数据时通过设置高亮参数,返回命中查询词的片段信息并对查询词进行高亮显示。仅Text类型字段支持查询摘要与高亮功能。 前提条件

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号