多條件組合查詢(BoolQuery)的查詢條件包含一個或者多個子查詢條件,根據子查詢條件來判斷一行資料是否滿足查詢條件。每個子查詢條件可以是任意一種Query類型,包括BoolQuery。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已在資料表上建立多元索引。具體操作,請參見建立多元索引。
參數
參數 | 說明 |
tableName | 資料表名稱。 |
indexName | 多元索引名稱。 |
mustQueries | 多個Query列表,行資料必須滿足所有的子查詢條件才算匹配,等價於And操作符。 |
mustNotQueries | 多個Query列表,行資料必須不能滿足任何的子查詢條件才算匹配,等價於Not操作符。 |
filterQueries | 多個Query列表,行資料必須滿足所有的子filter才算匹配,filter類似於query,區別是filter不會根據滿足的filter個數進行相關性算分。 |
shouldQueries | 多個Query列表,可以滿足,也可以不滿足,等價於Or操作符。 行資料應該至少滿足shouldQueries子查詢條件的最小匹配個數才算匹配。 如果滿足的shouldQueries子查詢條件個數越多,則整體的相關性分數更高。 |
minimumShouldMatch | shouldQueries的最小匹配個數。當同級沒有其他Query,只有shouldQueries時,預設值為1;當同級已有其他Query,例如mustQueries、mustNotQueries和filterQueries時,預設值為0。 |
樣本
以下樣本用於通過構造一個BoolQuery進行多條件組合查詢。
var client = require('../client');
var TableStore = require('../../index.js');
var Long = TableStore.Long;
/**
* 使用多條件組合查詢實現(col2<4 or col3<5) or (col2 = 4 and (col3 = 5 or col3 =6))。邏輯如下:
* boolQuery1 = rangeQuery(col2<4) or rangeQuery(col3<5)
* boolQuery2 = termQuery(col3=5) or (col3=6)
* boolQuery3 = termQuery(col2=4) and boolquery2
* boolQuery4 = boolQuery1 or boolQuery3
*/
client.search({
tableName: "sampleTable",
indexName: "sampleSearchIndex",
searchQuery: {
offset: 0, //查詢位移量。
limit: 10, //如果只為了擷取行數,無需擷取具體資料,可以設定limit=0,即不返回任意一行資料。
getTotalCount: false, //結果中的TotalCount可以表示表中資料的總行數,預設為false,表示不返回。
query: { //構造boolQuery4,設定查詢條件為至少滿足boolQuery1和boolQuery3中的一個條件。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
shouldQueries: [ //可選mustQueries、shouldQueries和mustNotQueries。
{ //構造boolQuery1,設定查詢條件為至少滿足“查詢條件一”和“查詢條件二”中的一個條件。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
//shouldQueries,查詢條件為col2的列值小於4或者col3的列值小於5。
shouldQueries:[
{
//查詢條件一:rangeQuery,col2的列值小於4。
queryType: TableStore.QueryType.RANGE_QUERY,
query:{
fieldName: "col2",
rangeTo: 4
}
},
{
//查詢條件二:rangeQuery,col3的列值小於5。
queryType: TableStore.QueryType.RANGE_QUERY,
query:{
fieldName: "col3",
rangeTo: 5
}
}
],
minimumShouldMatch:1
}
},
{ //構造boolQuery3,設定查詢條件為必須同時滿足“查詢條件三”和boolQuery2。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
mustQueries: [
//mustQueries,查詢條件為col2的列值等於4,且col3的列值等於5或者6。
{
//查詢條件三:termQuery,col2的列值等於4。
queryType:TableStore.QueryType.TERM_QUERY,
query: {
fieldName : "col2",
term: 4
}
},
{ //構造boolQuery2:設定查詢條件為至少滿足“查詢條件四”和“查詢條件五”中的一個條件。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
//shouldQueries,查詢條件為col3的列值等於5或者6。
shouldQueries:[
{
//查詢條件四:termQuery,col3的列值等於5。
queryType: TableStore.QueryType.TERM_QUERY,
query:{
fieldName:"col3",
term: 5
}
},
{
//查詢條件五:termQuery,col3的列值等於6。
queryType: TableStore.QueryType.TERM_QUERY,
query:{
fieldName:"col3",
term: 6
}
}
],
minimumShouldMatch:1
}
}
]
}
}
],
minimumShouldMatch: 1 //僅shouldQueries時有效,至少滿足的條件個數。
}
},
},
columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
returnNames: ["col2", "col3", "col4"]
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});
常見問題
相關文檔
多元索引查詢類型包括精確查詢、多詞精確查詢、全匹配查詢、匹配查詢、短語匹配查詢、首碼查詢、範圍查詢、萬用字元查詢、多條件組合查詢、地理位置查詢、巢狀型別查詢、向量檢索和列存在性查詢,您可以選擇合適的查詢類型進行多維度資料查詢。
如果要對結果集進行排序或者翻頁,您可以使用排序和翻頁功能來實現。具體操作,請參見排序和翻頁。
如果要按照某一列對結果集做摺疊,使對應類型的資料在結果展示中只出現一次,您可以使用摺疊(去重)功能來實現。具體操作,請參見摺疊(去重)。
如果要進行資料分析,例如求最值、求和、統計行數等,您可以使用Search介面的統計彙總功能或者SQL查詢來實現。具體操作,請參見統計彙總和SQL查詢。
如果要快速匯出資料,而不關心整個結果集的順序時,您可以使用ParallelScan介面和ComputeSplits介面實現多並發匯出資料。具體操作,請參見並發匯出資料。