All Products
Search
Document Center

Tablestore:Boolean query

Last Updated:Apr 30, 2026

Kueri Boolean mengambil baris dari tabel data dengan menggabungkan beberapa subkueri. Tablestore hanya mengembalikan baris yang memenuhi kondisi gabungan tersebut. Subkueri dapat berupa jenis apa pun, termasuk kueri Boolean lainnya.

Prasyarat

Parameter

Parameter

Deskripsi

table_name

Nama tabel data.

index_name

Nama indeks pencarian.

must_queries

Operator AND. Tablestore hanya mengembalikan baris yang memenuhi semua kondisi subkueri.

must_not_queries

Operator NOT. Tablestore hanya mengembalikan baris yang tidak memenuhi satupun kondisi subkueri. Ketika beberapa subkueri ditentukan, parameter ini setara dengan NOT(A OR B): suatu baris dikecualikan jika memenuhi salah satu subkueri.

filter_queries

Filter yang diterapkan dengan logika AND. Tablestore hanya mengembalikan baris yang memenuhi semua kondisi filter. Berbeda dengan must_queries, filter tidak menghitung skor relevansi.

should_queries

Operator OR. Tablestore mengembalikan baris yang memenuhi minimal jumlah tertentu dari kondisi subkueri. Skor relevansi suatu baris meningkat seiring dengan bertambahnya jumlah kondisi should_queries yang dipenuhi.

Gunakan minimum_should_match untuk menetapkan jumlah minimum kondisi yang harus dipenuhi oleh suatu baris.

minimum_should_match

Jumlah minimum kondisi should_queries yang harus dipenuhi oleh suatu baris agar dikembalikan. Jika hanya should_queries yang digunakan, nilai default-nya adalah 1. Jika must_queries, must_not_queries, atau filter_queries juga ada, nilai default-nya adalah 0.

Contoh

Contoh berikut menunjukkan cara menggunakan setiap klausa kueri Boolean. Semua contoh memanggil $otsClient->search($request) dengan QueryTypeConst::BOOL_QUERY sebagai jenis kueri.

AND

Gunakan must_queries untuk mewajibkan semua kondisi. Contoh berikut mengembalikan baris di mana bidang keyword bernilai "keyword" DAN bidang long berada dalam rentang [100, 101).

$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

Gunakan should_queries dengan minimum_should_match untuk mencocokkan salah satu kondisi. Contoh berikut mengembalikan baris di mana bidang keyword bernilai "keyword" ATAU bidang long berada dalam rentang [100, 101).

$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

Gunakan must_not_queries untuk mengecualikan baris yang memenuhi salah satu kondisi. Contoh berikut mengecualikan baris di mana bidang keyword bernilai "keyword" ATAU bidang long berada dalam rentang [100, 101) — yaitu, NOT(kondisi A ATAU kondisi 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_queries

Gunakan filter_queries ketika Anda memerlukan logika AND tanpa perhitungan skor relevansi. Contoh berikut mengembalikan baris yang memenuhi kedua kondisi tanpa memberi skor berdasarkan jumlah kondisi yang dipenuhi.

$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);

Kueri Gabungan

Sarangkan kueri Boolean untuk membangun logika kompleks. Contoh berikut mencocokkan baris yang memenuhi: (col2 < 4 OR col3 < 5) OR (col2 = 4 AND (col3 = 5 OR col3 = 6)).

$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' => [
                // Kombinasi akhir: (col2 < 4 or col3 < 5) or (col2 = 4 and (col3 = 5 or col3 = 6)) 
                'should_queries' => [
                    [
                        'query_type' => QueryTypeConst::BOOL_QUERY,
                        'query' => [
                            // Kombinasi 1: col2 < 4 or col3 < 5 
                            'should_queries' => [
                                [
                                    'query_type' => QueryTypeConst::RANGE_QUERY,
                                    // Kondisi 1: col2 < 4 
                                    'query' => [
                                        'field_name' => 'col2',
                                        'range_to' => 4
                                    ]
                                ],
                                [
                                    'query_type' => QueryTypeConst::RANGE_QUERY,
                                    // Kondisi 2: col3 < 5 
                                    'query' => [
                                        'field_name' => 'col3',
                                        'range_to' => 5
                                    ]
                                ]
                            ]
                        ]
                    ],
                    [
                        'query_type' => QueryTypeConst::BOOL_QUERY,
                        // Kombinasi 2: (col2 = 4 and (col3 = 5 or col3 = 6)) 
                        'query' => [
                            'must_queries' => [
                                [
                                    'query_type' => QueryTypeConst::TERM_QUERY,
                                    // Kondisi 3: col2 = 4 
                                    'query' => [
                                        'field_name' => 'col2',
                                        'term' => 4
                                    ]
                                ],
                                [
                                    'query_type' => QueryTypeConst::BOOL_QUERY,
                                    // Kombinasi 3: (col3 = 5 or col3 = 6) 
                                    'query' => [
                                        'should_queries' => [
                                            [
                                                'query_type' => QueryTypeConst::TERM_QUERY,
                                                // Kondisi 4: col3 = 5 
                                                'query' => [
                                                    'field_name' => 'col3',
                                                    'term' => 5
                                                ]
                                            ],
                                            [
                                                'query_type' => QueryTypeConst::TERM_QUERY,
                                                // Kondisi 5: col3 = 6 
                                                'query' => [
                                                    'field_name' => 'col3',
                                                    'term' => 6
                                                ]
                                            ]
                                        ],
                                        'minimum_should_match' => 1
                                    ]
                                ]
                            ]
                        ]
                    ]
                ],
                'minimum_should_match' => 1
            ]
        ]
    ],
    // Anda dapat mengonfigurasi parameter columns_to_get untuk menentukan kolom yang dikembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci primer yang dikembalikan. 
    'columns_to_get' => [ 
        //'return_type' => ColumnReturnTypeConst::RETURN_ALL // Menentukan bahwa semua kolom dikembalikan. 
        // Menentukan bahwa kolom tertentu dikembalikan. 
        'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 
        'return_names' => array('col1', 'col2')
    ]
);
$response = $otsClient->search($request);

FAQ

Referensi

  • Saat menggunakan indeks pencarian untuk mengkueri data, Anda dapat menggunakan metode kueri berikut: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query, dan exists query. Anda dapat menggunakan metode kueri yang berbeda untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.

    Jika Anda ingin mengurutkan atau melakukan pagination pada baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur pengurutan dan paging. Untuk informasi selengkapnya, lihat Sorting and paging.

    Jika Anda ingin melipat (collapse) set hasil berdasarkan kolom tertentu, Anda dapat menggunakan fitur collapse (distinct). Dengan demikian, data jenis tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi selengkapnya, lihat Collapse (distinct).

  • Jika Anda ingin menganalisis data dalam tabel data, seperti mendapatkan nilai ekstrem, jumlah total, dan jumlah baris, Anda dapat melakukan operasi agregasi atau mengeksekusi pernyataan SQL. Untuk informasi selengkapnya, lihat Aggregation dan SQL query.

  • Jika Anda ingin dengan cepat mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris tersebut, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi selengkapnya, lihat Parallel scan.