多條件組合查詢
前提條件
已初始化Client。具體操作,請參見初始化Tablestore Client。
已在資料表上建立多元索引。具體操作,請參見建立多元索引。
參數
|
參數 |
說明 |
|
TableName |
資料表名稱。 |
|
IndexName |
多元索引名稱。 |
|
MustQueries |
邏輯 AND 運算子。子查詢列表,行資料必須滿足所有子查詢條件才返回。 |
|
MustNotQueries |
邏輯 NOT 運算子。子查詢列表,滿足任意子查詢條件的行資料將被排除。 |
|
FilterQueries |
邏輯 AND 運算子,以篩選器方式執行。子查詢列表,行資料必須滿足所有子篩選條件才返回。與 MustQueries 的區別在於:FilterQueries 不計算相關性得分,僅做是否匹配的判斷,適用於精確匹配、範圍查詢和數值條件等情境。 |
|
ShouldQueries |
邏輯 OR 運算子。子查詢列表,行資料至少滿足最小匹配個數的子查詢條件才返回。滿足的子查詢條件越多,相關性得分越高。若未設定 MustQueries、MustNotQueries 或 FilterQueries,則預設至少滿足 1 個子查詢條件;若同時設定了上述條件,ShouldQueries 預設最小匹配個數為 0,僅作為相關性加分項。可通過 MinimumShouldMatch 顯式設定最小匹配個數。 |
|
MinimumShouldMatch |
ShouldQueries 子查詢條件的最小匹配個數。僅設定 ShouldQueries 時預設值為 1;同時設定 MustQueries、MustNotQueries 或 FilterQueries 時預設值為 0。 |
樣本
以下樣本展示兩種常見的 BoolQuery 用法:第一個使用 MustQueries 要求所有條件同時滿足(AND),第二個使用 ShouldQueries 要求至少滿足其中一個條件(OR)。
/**
* 通過BoolQuery進行多條件組合查詢。
*/
func BoolQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName)
searchRequest.SetIndexName(indexName)
// 查詢條件一:範圍查詢,Col_Long > 3
rangeQuery := &search.RangeQuery{}
rangeQuery.FieldName = "Col_Long"
rangeQuery.GT(3)
// 查詢條件二:匹配查詢,Col_Keyword 包含 "hangzhou"
matchQuery := &search.MatchQuery{}
matchQuery.FieldName = "Col_Keyword"
matchQuery.Text = "hangzhou"
{
// MustQueries:兩個條件必須同時滿足(AND)
boolQuery := &search.BoolQuery{
MustQueries: []search.Query{
rangeQuery,
matchQuery,
},
}
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(boolQuery)
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // 返回結果是否完整
fmt.Println("TotalCount: ", searchResponse.TotalCount) // 滿足條件的總行數(非返回行數)
fmt.Println("RowCount: ", len(searchResponse.Rows))
}
{
// ShouldQueries:至少滿足一個條件(OR)
boolQuery := &search.BoolQuery{
ShouldQueries: []search.Query{
rangeQuery,
matchQuery,
},
MinimumShouldMatch: proto.Int32(1),
}
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(boolQuery)
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // 返回結果是否完整
fmt.Println("TotalCount: ", searchResponse.TotalCount) // 滿足條件的總行數(非返回行數)
fmt.Println("RowCount: ", len(searchResponse.Rows))
}
}
常見問題
相關文檔
多元索引查詢類型包括精確查詢、多詞精確查詢、全匹配查詢、匹配查詢、短語匹配查詢、首碼查詢、範圍查詢、萬用字元查詢、多條件組合查詢、地理位置查詢、巢狀型別查詢、向量檢索和列存在性查詢,您可以選擇合適的查詢類型進行多維度資料查詢。
如果要對結果集進行排序或者翻頁,您可以使用排序和翻頁功能來實現。具體操作,請參見排序和翻頁。
如果要按照某一列對結果集做摺疊,使對應類型的資料在結果展示中只出現一次,您可以使用摺疊(去重)功能來實現。具體操作,請參見摺疊(去重)。
如果要進行資料分析,例如求最值、求和、統計行數等,您可以使用Search介面的統計彙總功能或者SQL查詢來實現。具體操作,請參見統計彙總和SQL查詢。
如果要快速匯出資料,而不關心整個結果集的順序時,您可以使用ParallelScan介面和ComputeSplits介面實現多並發匯出資料。具體操作,請參見並發匯出資料。