摘要与高亮

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

前提条件

注意事项

  • 表格存储Node.js SDK5.5.0版本开始支持查询高亮功能。使用查询高亮功能时,请确保获取了正确的Node.js SDK版本。关于Node.js SDK历史迭代版本的更多信息,请参见Node.js SDK历史迭代版本

  • MatchQueryMatchPhraseQuery中使用查询高亮功能时,查询词可能会被多个preTag、postTag高亮显示。

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

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

参数

参数

说明

highlightEncoder

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

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

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

fieldHighlightParams

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

HighlightParameter

numberOfFragments

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

fragmentSize

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

重要

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

preTag

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

postTag

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

highlightFragmentOrder

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

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

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

示例

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

client.search({
    tableName: "<TABLE_NAME>",
    indexName: "<SEARCH_INDEX_NAME>",
    searchQuery: {
        offset: 0,
        limit: 10, //如果只为了取行数,但不需要具体数据,可以设置limit=0,即不返回任意一行数据。
        query: { //设置查询类型为MatchQuery。
            queryType: TableStore.QueryType.MATCH_QUERY,
            query: {
                fieldName: "Col_Text", //设置要匹配的列。
                text: "hangzhou shanghai" //设置要匹配的值。
            }
        },
        highlight:{
            highlightEncoder:TableStore.HighlightEncoder.PLAIN_MODE,
            highlightParameters:[
                {
                    fieldName:"Col_Text",
                    preTag: "<b>",
                    postTag: "</b>",
                    fragmentsOrder: TableStore.HighlightFragmentOrder.TEXT_SEQUENCE,
                    fragmentSize: 20,
                    numberOfFragments: 3,
                }
                
            ],
        },
        getTotalCount: true //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。
    },
    columnToGet: { //返回列设置,可设置为RETURN_SPECIFIED(自定义返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data.rows, null, 2));
    printSearchHit(data.searchHits, "");
});


/**
 * 打印searchHit内容。
 * @param searchHits searchHits
 * @param prefix Nested结构输出时,增加前缀以打印层次信息。
 */
function printSearchHit(searchHits, prefix) {
    TableStore.util.arrayEach(searchHits, function (searchHit) {
        if (searchHit.highlightResultItem != null) {
            console.log(prefix + "Highlight: \n");
            var strBuilder = ""
            for  (const [key,val]  of searchHit.highlightResultItem.highlightFields.entries()) {
                strBuilder += key + ":[";
                strBuilder += val.fragments.join(",") + "]\n";
                console.log(strBuilder);
            }
        }
        for  (const [key,val]  of searchHit.searchInnerHits.entries()) {
            console.log(prefix + "Path: " + key + "\n");
            console.log(prefix + "InnerHit: \n");
            printSearchHit(val.subSearchHits, prefix + "    ");
        }
    });
}

相关文档

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

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