使用 Tablestore Go SDK 的多條件組合查詢按 AND、OR、NOT 和過濾邏輯組合多個查詢條件。
前提條件
安裝Tablestore Go SDK並初始化用戶端。
功能說明
多條件組合查詢將多個子查詢按 Must、Should、MustNot 和 Filter 邏輯組合。Must 和 Filter 中的條件必須匹配,Should 中的條件按 MinShouldMatch 要求匹配,MustNot 中的條件不能匹配。
func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)以下樣本查詢資料並返回最多 10 行資料及匹配總行數。
tableName := "example_table"
indexName := "example_index"
query := &search.BoolQuery{MustQueries: []search.Query{&search.TermQuery{FieldName: "category", Term: "books"}}, MustNotQueries: []search.Query{&search.TermQuery{FieldName: "status", Term: "inactive"}}}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)參數說明
查詢請求
request 的類型為 tablestore.SearchRequest,包含以下參數。
名稱 | 類型 | 說明 |
TableName(必選) | string | 資料表名稱。 |
IndexName(必選) | string | 多元索引名稱。 |
SearchQuery(必選) | search.SearchQuery | 查詢條件和通用查詢配置。 |
ColumnsToGet(可選) | *tablestore.ColumnsToGet | 返回列配置。未設定時只返回主鍵列。 |
RoutingValues(可選) | []*tablestore.PrimaryKey | 自訂路由欄位對應的主索引值列表。未配置自訂路由時無需設定。 |
TimeoutMs(可選) | *int32 | 請求級逾時時間,單位為毫秒。 |
查詢配置
通過 search.NewSearchQuery() 建立查詢配置,並使用以下方法設定參數。
名稱 | 類型 | 說明 |
SetQuery(必選) | search.Query | 設定查詢條件。 |
SetOffset(可選) | int32 | 設定本次查詢的起始位置,預設值為 0。使用 Offset 翻頁時,Offset + Limit 不能超過 100000。 |
SetLimit(可選) | int32 | 設定本次查詢返回的最大行數,預設值為 10,最大值為 100。設定為 0 時不返回具體行。 |
SetHighlight(可選) | *search.Highlight | 設定 Text 欄位的摘要與高亮。配置方法請參見摘要與高亮。 |
SetCollapse(可選) | *search.Collapse | 設定結果摺疊。配置方法請參見摺疊(去重)。 |
SetSort(可選) | *search.Sort | 設定返回結果的排序方式。配置方法請參見排序和翻頁。 |
SetGetTotalCount(可選) | bool | 是否統計匹配總行數,預設值為 false。 |
SetToken(可選) | []byte | 設定上一次響應返回的 NextToken,以繼續讀取後續資料。調用該方法會清除 Sort,因為 Token 已包含上一頁的排序條件。使用 Token 翻頁時不能設定 Offset。 |
SetSearchFilter(可選) | *search.SearchFilter | 對查詢結果執行後過濾。配置方法請參見查詢後過濾。 |
Aggregation(可選) | ...search.Aggregation | 設定統計彙總。配置方法請參見統計彙總。 |
GroupBy(可選) | ...search.GroupBy | 設定分組。配置方法請參見統計彙總。 |
查詢條件
查詢類型為 search.BoolQuery,包含以下參數。
名稱 | 類型 | 說明 |
MustQueries(可選) | []search.Query | 必須匹配的子查詢列表,邏輯關係為 AND。 |
ShouldQueries(可選) | []search.Query | 應匹配的子查詢列表,邏輯關係為 OR。 |
MustNotQueries(可選) | []search.Query | 必須不匹配的子查詢列表。 |
FilterQueries(可選) | []search.Query | 必須匹配但不參與相關性評分的子查詢列表。 |
MinShouldMatch(可選) | *string | ShouldQueries 中至少需要匹配的子查詢數量或比例,例如 |
Weight(可選) | *float32 | 查詢條件的相關性權重。該值不改變匹配結果,只在按相關性評分排序時影響順序。 |
返回列
request.ColumnsToGet 的類型為 tablestore.ColumnsToGet,包含以下參數。
名稱 | 類型 | 說明 |
Columns(可選) | []string | 要返回的屬性列名稱。僅 ReturnAll 和 ReturnAllFromIndex 均為 false 時生效。 |
ReturnAll(可選) | bool | 是否返回資料表中的全部屬性列,預設值為 false。 |
ReturnAllFromIndex(可選) | bool | 是否返回已建立索引的全部屬性列,預設值為 false。不能與 ReturnAll 同時設定為 true。 |
傳回值
Search 方法返回 tablestore.SearchResponse。核心業務欄位如下。
名稱 | 類型 | 說明 |
TotalCount | int64 | 匹配總行數。傳回值取決於 SetGetTotalCount 配置。 |
Rows | []*tablestore.Row | 本次查詢返回的行資料,數量不超過 SetLimit 指定的值。 |
SearchHits | []*tablestore.SearchHit | 查詢命中結果。配置摘要與高亮、嵌套 InnerHits 或需要相關性評分時,從該欄位讀取結果。 |
NextToken | []byte | 下一頁憑證。值非空時,將其傳入下一次查詢繼續讀取。 |
IsAllSuccess | bool | 是否已成功查詢全部索引分割區。值為 false 時返回的是部分結果,TotalCount 可能小於實際匹配行數。 |
AggregationResults | search.AggregationResults | 統計彙總結果。 |
GroupByResults | search.GroupByResults | 分組結果。 |