全部產品
Search
文件中心

:查詢高亮

更新時間:Sep 13, 2024

在查詢資料時通過設定高亮參數,返回命中查詢關鍵詞的片段資訊並對關鍵詞進行高亮顯示。僅Text類型欄位支援查詢高亮功能。

前提條件

注意事項

  • Table StoreNode.js SDK從5.5.0版本開始支援查詢高亮功能。使用查詢高亮功能時,請確保擷取了正確的Node.js SDK版本。關於Node.js SDK歷史迭代版本的更多資訊,請參見Node.js SDK歷史迭代版本

  • 在MatchQuery和MatchPhraseQuery中使用查詢高亮功能時,關鍵詞可能會被多個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 + "    ");
        }
    });
}

相關文檔

  • 關於查詢高亮功能的更多資訊,請參見查詢高亮

  • 如果要在查詢巢狀型別欄位時使用查詢高亮功能,請參考巢狀型別查詢文檔。