全部產品
Search
文件中心

Tablestore:摘要與高亮

更新時間:Jul 28, 2026

使用 Tablestore Java SDK 的摘要與高亮功能可返回包含命中詞條的 Text 欄位片段,並使用指定標籤標記命中詞條。

前提條件

安裝Tablestore Java SDK並初始化用戶端。

功能說明

摘要與高亮用於從查詢結果中提取命中詞條附近的文本片段,並使用前置標籤和後置標籤標記命中詞條,便於展示命中上下文。該功能僅支援 Text 類型欄位。

使用摘要與高亮前,需要在建立多元索引時將目標欄位的 enableHighlighting 設定為 true。查詢時,通過 SearchQuery.highlight 指定要返回摘要與高亮結果的欄位及分區配置。目標欄位必須參與支援摘要與高亮的查詢條件,否則不會返回該欄位的高亮分區。

支援摘要與高亮的查詢類型包括 TermQueryTermsQueryMatchQueryMatchPhraseQueryPrefixQueryWildcardQueryRangeQueryBoolQueryConstScoreQueryNestedQuery

使用 BoolQueryConstScoreQuery 時,可為上述七種查詢類型的子查詢所使用的欄位配置摘要與高亮。使用 NestedQuery 查詢巢狀型別欄位時,需要通過 InnerHits.highlight 配置匹配子行的摘要與高亮,具體操作請參見巢狀型別查詢

說明
  • 使用 MatchQueryMatchPhraseQuery 時,同一個命中詞條可能被多組前置標籤和後置標籤標記。

  • Text 欄位使用最大數量語義分詞時,MatchPhraseQuery 不支援摘要與高亮。

  • 分區邊界可能切分命中詞條,導致該詞條未被高亮。

以下樣本使用匹配查詢檢索 description 欄位中包含 tablestore 詞條的資料,並使用 <b></b> 標記返回分區中的命中詞條。description 欄位為已啟用摘要與高亮的 Text 欄位。

String tableName = "example_table";
String indexName = "example_index";

MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore");

HighlightParameter highlightParameter = new HighlightParameter();
highlightParameter.setPreTag("<b>");
highlightParameter.setPostTag("</b>");

Highlight highlight = new Highlight();
highlight.addFieldHighlightParam("description", highlightParameter);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
searchQuery.setHighlight(highlight);
searchQuery.setLimit(10);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
for (SearchHit hit : response.getSearchHits()) {
    HighlightResultItem resultItem = hit.getHighlightResultItem();
    if (resultItem == null) {
        continue;
    }
    HighlightField field = resultItem.getHighlightFieldByName("description");
    if (field != null) {
        System.out.println(field.getFragments());
    }
}

參數說明

request.searchQuery.highlight 的類型為 Highlight。其中,fieldHighlightParams 的值為 HighlightParameter,用於配置每個欄位的分區行為。

下表使用完整參數路徑說明 HighlightHighlightParameter 兩層配置。

名稱

類型

說明

fieldHighlightParams(必選)

Map<String, HighlightParameter>

欄位名稱及其分區配置。鍵為要返回摘要與高亮結果的欄位名稱,值為該欄位的 HighlightParameter。欄位必須已啟用摘要與高亮,並參與支援摘要與高亮的查詢條件。

highlightEncoder(可選)

HighlightEncoder

高亮分區中原文的編碼方式。取值如下:

  • PLAIN(預設):不編碼原文。

  • HTML:對原文執行 HTML 轉義,適用於在網頁中展示結果。逸出字元包括 <>"'/,分別轉義為 &lt;&gt;&quot;&#x27;&#x2F;

fieldHighlightParams[].numberOfFragments(可選)

Integer

單個欄位返回的最大高亮分區數。建議設定為 1

fieldHighlightParams[].fragmentSize(可選)

Integer

每個分區的目標長度。預設值為 100。實際返回長度可能與該值不同。

fieldHighlightParams[].preTag(可選)

String

命中詞條的前置標籤。預設值為 <em>,可自訂為 <b> 等標籤。必須與 postTag 同時設定。支援字元 < > " ' /a-zA-Z0-9

fieldHighlightParams[].postTag(可選)

String

命中詞條的後置標籤。預設值為 </em>,可自訂為 </b> 等標籤。必須與 preTag 同時設定,支援的字元與 preTag 相同。

fieldHighlightParams[].highlightFragmentOrder(可選)

HighlightFragmentOrder

返回多個高亮分區時的排序方式。TEXT_SEQUENCE(預設)按分區在原文中的位置排序;SCORE 按命中詞條的相關性得分排序。

傳回值

查詢響應

search 方法返回 SearchResponse。與摘要與高亮相關的核心欄位如下。

名稱

類型

說明

searchHits

List<SearchHit>

查詢命中結果,通過 getSearchHits() 擷取。每個元素包含行資料和摘要與高亮結果。

isAllSuccess

boolean

是否已成功查詢全部索引分割區,通過 isAllSuccess() 擷取。值為 false 時,返回的是部分結果。

查詢命中

response.searchHits[] 的類型為 SearchHit。與摘要與高亮相關的欄位如下。

名稱

類型

說明

row

Row

命中的行資料,通過 getRow() 擷取。

highlightResultItem

HighlightResultItem

當前行所有欄位的摘要與高亮結果,通過 getHighlightResultItem() 擷取。當前行沒有高亮結果時為 null

高亮結果

response.searchHits[].highlightResultItem 的類型為 HighlightResultItem,包含以下欄位。

名稱

類型

說明

highlightFields

Map<String, HighlightField>

當前行各欄位的高亮結果,通過 getHighlightFields() 擷取。也可調用 getHighlightFieldByName(fieldName) 擷取指定欄位的結果;該欄位沒有高亮結果時返回 null

欄位分區

response.searchHits[].highlightResultItem.highlightFields[fieldName] 的類型為 HighlightField,包含以下欄位。

名稱

類型

說明

fragments

List<String>

指定欄位的高亮分區列表,通過 getFragments() 擷取。分區中的命中詞條已使用配置的前置標籤和後置標籤標記。