すべてのプロダクト
Search
ドキュメントセンター

Tablestore:ブールクエリ

最終更新日:Dec 28, 2024

ブールクエリは、サブクエリの組み合わせに基づいてデータテーブル内のデータを取得します。Tablestore は、サブクエリの条件に一致する行を返します。サブクエリは、ブールクエリを含む任意のタイプにすることができます。

前提条件

パラメーター

パラメーター

説明

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

参考資料