BoolQuery查詢條件包含一個或者多個子查詢條件,根據子查詢條件來判斷一行數據是否滿足查詢條件。每個子查詢條件可以是任意一種Query類型,包括BoolQuery。
前提條件
- 已初始化OTSClient。具體操作,請參見初始化OTSClient。
- 已創建數據表并寫入數據。
- 已在數據表上創建多元索引。具體操作,請參見創建多元索引。
參數
參數 | 說明 |
table_name | 數據表名稱。 |
index_name | 多元索引名稱。 |
must_queries | 多個Query列表,行數據必須滿足所有的子查詢條件才算匹配,等價于And操作符。 |
must_not_queries | 多個Query列表,行數據必須不能滿足任何的子查詢條件才算匹配,等價于Not操作符。 |
filter_queries | 多個Query列表,行數據必須滿足所有的子filter才算匹配,filter類似于query,區別是filter不會根據滿足的filter個數進行相關性算分。 |
should_queries | 多個Query列表,可以滿足,也可以不滿足,等價于Or操作符。 行數據應該至少滿足should_queries子查詢條件的最小匹配個數才算匹配。 如果滿足的should_queries子查詢條件個數越多,則整體的相關性分數更高。 |
minimum_should_match | should_queries子查詢條件的最小匹配個數。當同級沒有其他Query,只有should_queries時,默認值為1;當同級已有其他Query,例如must_queries、must_not_queries和filter_queries時,默認值為0。 |
示例
使用多條件組合查詢的示例如下:
And條件查詢
以下示例用于通過BoolQuery進行And條件查詢,查詢條件為MustQueries(A AND B),即查詢同時滿足條件A和條件B的行。
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'must_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
Or條件查詢
以下示例用于通過BoolQuery進行Or條件查詢,查詢滿足條件A和條件B中至少一個條件的行。
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'should_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
'minimum_should_match' => 1
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
Not條件查詢
以下示例用于通過BoolQuery進行Not條件查詢,查詢條件為MustNotQueries(!A AND !B),即查詢同時不滿足條件A和條件B的行。
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'must_not_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
Filter條件查詢
以下示例通過BoolQuery進行Filter條件查詢,查詢條件為FilterQueries(A AND B),即查詢同時滿足條件A和條件B的行,行數據不會根據滿足條件個數進行相關性算分。
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'filter_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
組合查詢
以下示例用于含有子BoolQuery的組合查詢。使用多條件組合查詢實現(col2<4 or col3<5) or (col2 = 4 and (col3 = 5 or col3 =6)),每個and或or相當于一個BoolQuery,多個表達式的and或or就是多個BoolQuery的組合。
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_index',
'search_query' => [
'offset' => 0,
'limit' => 10,
'get_total_count' => false,
'query' => [
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => [
//總組合查詢條件為(col2<4 or col3<5) or (col2 = 4 and (col3 = 5 or col3 =6))。
'should_queries' => [
[
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => [
//組合條件1為(col2<4 or col3<5)。
'should_queries' => [
[
'query_type' => QueryTypeConst::RANGE_QUERY,
//查詢條件1為col2<4。
'query' => [
'field_name' => 'col2',
'range_to' => 4
]
],
[
'query_type' => QueryTypeConst::RANGE_QUERY,
//查詢條件2為col3<5。
'query' => [
'field_name' => 'col3',
'range_to' => 5
]
]
]
]
],
[
'query_type' => QueryTypeConst::BOOL_QUERY,
//組合條件2為(col2 = 4 and (col3 = 5 or col3 =6))。
'query' => [
'must_queries' => [
[
'query_type' => QueryTypeConst::TERM_QUERY,
//查詢條件3為col2=4。
'query' => [
'field_name' => 'col2',
'term' => 4
]
],
[
'query_type' => QueryTypeConst::BOOL_QUERY,
//組合條件3為(col3 = 5 or col3 =6))。
'query' => [
'should_queries' => [
[
'query_type' => QueryTypeConst::TERM_QUERY,
//查詢條件4為col3=5。
'query' => [
'field_name' => 'col3',
'term' => 5
]
],
[
'query_type' => QueryTypeConst::TERM_QUERY,
//查詢條件5為col3=6。
'query' => [
'field_name' => 'col3',
'term' => 6
]
]
],
'minimum_should_match' => 1
]
]
]
]
]
],
'minimum_should_match' => 1
]
]
],
//通過設置columns_to_get參數可以指定返回的列或返回所有列,如果不設置此參數,則默認只返回主鍵列。
'columns_to_get' => [
//'return_type' => ColumnReturnTypeConst::RETURN_ALL //設置為返回所有列。
//設置為返回指定列。
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('col1', 'col2')
]
);
$response = $otsClient->search($request);
常見問題
相關文檔
多元索引查詢類型包括精確查詢、多詞精確查詢、全匹配查詢、匹配查詢、短語匹配查詢、前綴查詢、范圍查詢、通配符查詢、多條件組合查詢、地理位置查詢、嵌套類型查詢和列存在性查詢,您可以選擇合適的查詢類型進行多維度數據查詢。
如果要對結果集進行排序或者翻頁,您可以使用排序和翻頁功能來實現。具體操作,請參見排序和翻頁。
如果要按照某一列對結果集做折疊,使對應類型的數據在結果展示中只出現一次,您可以使用折疊(去重)功能來實現。具體操作,請參見折疊(去重)。
如果要進行數據分析,例如求最值、求和、統計行數等,您可以使用Search接口的統計聚合功能或者SQL查詢來實現。具體操作,請參見統計聚合和SQL查詢。
如果要快速導出數據,而不關心整個結果集的順序時,您可以使用ParallelScan接口和ComputeSplits接口實現多并發導出數據。具體操作,請參見并發導出數據。