ブールクエリは、サブクエリの組み合わせに基づいてデータテーブル内のデータを取得します。Tablestore は、サブクエリの条件に一致する行を返します。サブクエリは、ブールクエリを含む任意のタイプにすることができます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化 を参照してください。
データテーブルが作成されていること。データがテーブルに書き込まれていること。詳細については、データテーブルの作成 および データの書き込み を参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成 を参照してください。
パラメーター
パラメーター | 説明 |
table_name | データテーブルの名前。 |
index_name | 検索インデックスの名前。 |
must_queries | サブクエリの条件のリスト。すべてのサブクエリの条件を満たす行のみが返されます。このパラメーターは AND 演算子と同等です。 |
must_not_queries | サブクエリの条件のリスト。サブクエリの条件を満たさない行のみが返されます。このパラメーターは NOT 演算子と同等です。 |
filter_queries | サブクエリの条件のリスト。すべてのサブフィルターを満たす行のみが返されます。フィルターはクエリに似ていますが、フィルターでは、行が満たすサブフィルターの数に基づいて関連性スコアが計算されない点が異なります。 |
should_queries | サブクエリの条件のリスト。クエリ結果が返されるためにすべてのサブクエリの条件を満たす必要はありません。このパラメーターは OR 演算子と同等です。 should_queries パラメーターで指定された最小数のサブクエリの条件を満たす行のみが返されます。 全体的な関連性スコアが高いほど、should_queries パラメーターで指定されたサブクエリの条件が多く満たされていることを示します。 |
minimum_should_match | 返される行が満たす必要がある should_queries パラメーターで指定されたサブクエリの条件の最小数。サブクエリの条件を指定するために should_queries パラメーターのみを使用する場合、minimum_should_match パラメーターのデフォルト値は 1 です。must_queries、must_not_queries、および filter_queries パラメーターの 1 つ以上もサブクエリの条件を指定するために使用する場合、minimum_should_match パラメーターのデフォルト値は 0 です。 |
例
このセクションでは、ブールクエリの使用例を示します。
AND
次のサンプルコードは、must_queries パラメーターと AND 関係にある 2 つのクエリ条件を使用してブールクエリを実行する方法を示しています。
$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
次のサンプルコードは、should_queries パラメーターと OR 関係にある 2 つのクエリ条件を使用してブールクエリを実行する方法を示しています。
$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
次のサンプルコードは、must_not_queries パラメーターと NOT 関係にある 2 つのクエリ条件を使用してブールクエリを実行する方法を示しています。
$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_queries
次のサンプルコードは、filter_queries パラメーターと 2 つのクエリ条件を使用してブールクエリを実行する方法を示しています。行は、満たされる条件の数に基づいて関連性スコアが付けられません。
$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);
複合クエリ
次のサンプルコードは、(col2<4 or col3<5) or (col2 = 4 and (col3 = 5 or col3 =6)) というサブクエリの条件の組み合わせを満たす行をクエリするためのブールクエリを実行する方法の例を示しています。上記のサブクエリの条件の組み合わせでは、ブールサブクエリは AND または OR 演算子で接続されています。
$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);
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。タームクエリ、タームズクエリ、マッチオールクエリ、マッチクエリ、マッチフレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、ジオクエリ、ネストされたクエリ、存在クエリ。ビジネス要件に基づいて、さまざまなクエリメソッドを使用して複数のディメンションからデータをクエリできます。
クエリ条件を満たす行をソートまたはページネーションする場合は、ソートおよびページネーション機能を使用できます。詳細については、ソートとページネーション を参照してください。
特定の列に基づいて結果セットを折り畳む場合は、折り畳み (個別) 機能を使用できます。このようにして、指定されたタイプのデータはクエリ結果に 1 回だけ表示されます。詳細については、折り畳み (個別) を参照してください。
データテーブル内のデータ (極値、合計、行の総数など) を分析する場合は、集計操作を実行するか、SQL ステートメントを実行できます。詳細については、集計 および SQL クエリ を参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行をすばやく取得する場合は、ParallelScan および ComputeSplits オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャン を参照してください。