全部產品
Search
文件中心

:查詢高亮

更新時間:Sep 13, 2024

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

前提條件

注意事項

  • 在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-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類型。

func MatchQuerywithHighlight(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)
    query := &search.MatchQuery{} //設定查詢類型為MatchQuery。
    query.FieldName = "Col_Text"   //設定要匹配的列。
    query.Text = "hangzhou shanghai"     //設定要匹配的值。
    searchQuery := search.NewSearchQuery()
    searchQuery.SetQuery(query)
    highlight := &search.Highlight{
        FieldHighlightParameters: map[string]*search.HighlightParameter{
            "Col_Text": {
                NumberOfFragments: proto.Int32(5),
                PreTag:            proto.String("<b>"),
                PostTag:           proto.String("</b>"),
            },
        },
    }
    searchQuery.SetHighlight(highlight)
    searchQuery.SetGetTotalCount(true)
    searchQuery.SetOffset(0) //設定offset為0。
    searchQuery.SetLimit(20) //設定limit為20,表示最多返回20條資料。
    searchRequest.SetSearchQuery(searchQuery)
    // 設定返回多元索引中的所有列。
    searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
        ReturnAllFromIndex: true,
    })

    if resp, err := client.Search(searchRequest); err != nil {
        fmt.Println("Highlighting query failed with err: ", err)
    } else {
        fmt.Println("RequestId: " + resp.RequestId)
        // 列印查詢和高亮結果。查詢非巢狀型別欄位時設定padding為空白即可。
        printSearchHit(resp.SearchHits, " ")
    }
    fmt.Println("highlight query finished")
}

/**
 * 列印searchHit內容。
 * @param searchHits searchHits
 * @param padding Nested結構輸出時,增加首碼以列印層次資訊。
 */
func printSearchHit(searchHits []*tablestore.SearchHit, padding string) {
    for _, searchHit := range searchHits {
        if searchHit.Score != nil {
            fmt.Printf("%sScore: %f\n", padding, *searchHit.Score)
        }

        if searchHit.Row != nil {
            jsonBody, err := json.Marshal(*searchHit.Row)
            if err != nil {
                panic(err)
            }
            fmt.Println("Row: ", string(jsonBody))
        }

        if searchHit.HighlightResultItem != nil && len(searchHit.HighlightResultItem.HighlightFields) != 0 {
            fmt.Printf("%sHighlight: \n", padding)
            for colName, highlightResult := range searchHit.HighlightResultItem.HighlightFields {
                fmt.Printf("%sColumnName: %s, Highlight_Fragments: %v\n", padding+padding, colName, highlightResult.Fragments)
            }
        }

        fmt.Println("")
    }
}

相關文檔

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

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