全部產品
Search
文件中心

Tablestore:匹配查詢

更新時間:Jul 28, 2026

使用 Tablestore Java SDK 的匹配查詢可檢索 Text 或 Keyword 類型欄位,並返回滿足匹配條件的資料及相關性得分。

前提條件

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

功能說明

匹配查詢用於檢索 TextKeyword 類型欄位(欄位說明請參見字串類型),兩種欄位的匹配方式不同:

  • Text:使用建立多元索引時配置的分詞器對欄位值和查詢文本分詞,然後根據詞條匹配。未配置分詞器時,預設使用單字分詞。預設使用 OR 邏輯,欄位值包含任意查詢詞條即可命中;也可改為 AND 邏輯,或指定最少需要匹配的詞條數。

  • Keyword:欄位值和查詢文本均不分詞,欄位完整值與查詢文本相同時命中。

匹配查詢只判斷詞條是否匹配,不要求詞條按查詢文本中的順序相鄰出現。如需按詞條順序匹配,請使用短語匹配查詢。如果 Text 欄位使用模糊分詞器且需要執行高效能模糊查詢,也建議使用短語匹配查詢。

以下樣本查詢 description 欄位中包含 tablestoredurable 詞條的資料,返回最多 10 行資料、匹配總行數和相關性得分。

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

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

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
for (SearchHit hit : response.getSearchHits()) {
    System.out.println(hit.getRow());
    System.out.println(hit.getScore());
}

參數說明

查詢請求

request 的類型為 SearchRequest,包含以下參數。

名稱

類型

說明

tableName(必選)

String

資料表名稱。

indexName(必選)

String

多元索引名稱。

searchQuery(必選)

SearchQuery

查詢條件和通用查詢配置。

columnsToGet(可選)

SearchRequest.ColumnsToGet

返回列配置。未設定時只返回主鍵列。

timeoutInMillisecond(可選)

int

請求級查詢逾時時間,單位為毫秒。預設值為 -1,表示不單獨設定查詢逾時時間。

routingValues(可選)

List<PrimaryKey>

自訂路由欄位對應的主索引值列表。未配置自訂路由時無需設定。

查詢配置

request.searchQuery 的類型為 SearchQuery,包含以下參數。

名稱

類型

說明

query(必選)

Query

查詢條件。匹配查詢設定為 MatchQuery

offset(可選)

Integer

本次查詢的起始位置。

limit(可選)

Integer

本次查詢返回的最大行數。設定為 0 時不返回具體行。

highlight(可選)

Highlight

Text 欄位的摘要與高亮配置。有關配置方法,請參見摘要與高亮

collapse(可選)

Collapse

結果摺疊配置,用於按指定列對返回結果去重。有關配置方法,請參見摺疊(去重)

sort(可選)

Sort

返回結果的排序方式。有關配置方法,請參見排序和翻頁

trackTotalCount(可選)

int

期望統計的最大匹配行數。預設值為 TRACK_TOTAL_COUNT_DISABLED,表示不統計;設定為 TRACK_TOTAL_COUNT 時統計全部匹配行。值越小,查詢效能越高。

filter(可選)

SearchFilter

query 的查詢結果進行過濾。

aggregationList(可選)

List<Aggregation>

統計彙總配置。有關配置方法,請參見統計彙總

groupByList(可選)

List<GroupBy>

分組配置。有關配置方法,請參見統計彙總

token(可選)

byte[]

翻頁憑證。將上一次響應的 nextToken 設定為該參數可繼續讀取後續資料。設定 token 時,SDK 會清除 sort,因為翻頁憑證中已包含排序條件。

匹配條件

request.searchQuery.query 的類型為 MatchQuery,包含以下參數。

名稱

類型

說明

fieldName(必選)

String

要查詢的 TextKeyword 類型索引欄位名稱。

text(必選)

String

查詢文本。查詢 Text 欄位時,使用欄位的分詞器對查詢文本分詞;查詢 Keyword 欄位時,不對查詢文本分詞。

operator(可選)

QueryOperator

查詢詞條的組合方式。OR(預設)表示匹配任意詞條即可命中;AND 表示必須匹配所有詞條。

minShouldMatch(可選)

String 或 int

operatorOR 時,至少需要匹配的查詢詞條數。可設定整數,例如 2,也可設定百分比字串,例如 "75%"

weight(可選)

float

查詢權重。預設值為 1.0,必須為正浮點數。值越大,該查詢對相關性得分的貢獻越大,不改變匹配範圍。

重要

setMinimumShouldMatch(Integer) 已棄用。請使用 setMinShouldMatch(int)setMinShouldMatch(String)

返回列

request.columnsToGet 的類型為 SearchRequest.ColumnsToGet,包含以下參數。

名稱

類型

說明

columns(可選)

List<String>

要返回的屬性列名稱。僅 returnAllreturnAllFromIndex 均為 false 時需要設定;未設定時只返回主鍵列。

returnAll(可選)

boolean

是否返回資料表中的全部屬性列。預設值為 false

returnAllFromIndex(可選)

boolean

是否返回已建立索引的全部屬性列。預設值為 false。不能與 returnAll 同時設定為 true

傳回值

查詢響應

search 方法返回 SearchResponse。核心欄位如下。

名稱

類型

說明

totalCount

long

匹配行數,通過 getTotalCount() 擷取。傳回值取決於 trackTotalCount 配置。

rows

List<Row>

本次查詢返回的行資料,通過 getRows() 擷取。返回數量不超過 limit

searchHits

List<SearchHit>

查詢命中結果,通過 getSearchHits() 擷取。可從該欄位讀取相關性得分和摘要與高亮結果。

nextToken

byte[]

下一頁憑證,通過 getNextToken() 擷取。值不為 null 時,將其設定到下一次請求的 token 中繼續讀取。

isAllSuccess

boolean

是否已成功查詢全部索引分割區,通過 isAllSuccess() 擷取。值為 false 時,返回的是部分結果,totalCount 可能小於實際匹配行數。

查詢命中

response.searchHits[] 的類型為 SearchHit,包含以下核心欄位。

名稱

類型

說明

row

Row

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

score

Double

相關性得分,通過 getScore() 擷取。使用 ScoreSort 按相關性得分排序時返回實際得分。匹配詞條和 weight 會影響該值。

highlightResultItem

HighlightResultItem

摘要與高亮結果,通過 getHighlightResultItem() 擷取。

情境樣本

匹配全部查詢詞條

operator 設定為 AND,只有欄位值包含全部查詢詞條時才命中。

MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
matchQuery.setOperator(QueryOperator.AND);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);

設定最小匹配詞條數

使用 OR 邏輯時,可通過 minShouldMatch 指定至少需要匹配的查詢詞條數。以下樣本要求至少匹配兩個詞條。

MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable cloud");
matchQuery.setOperator(QueryOperator.OR);
matchQuery.setMinShouldMatch(2);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);