全部产品
Search
文档中心

Tablestore:Kueri Boolean

更新时间:Jul 06, 2025

Kueri Boolean digunakan untuk mengambil data dari tabel berdasarkan kombinasi subkueri. Tablestore akan mengembalikan baris yang memenuhi kondisi subkueri, di mana subkueri dapat berupa tipe apa pun, termasuk kueri Boolean itu sendiri.

Prasyarat

Parameter

Parameter

Deskripsi

mustQueries

Daftar subkueri. Hanya baris yang memenuhi semua kondisi subkueri yang dikembalikan. Parameter ini setara dengan operator AND.

mustNotQueries

Daftar subkueri. Hanya baris yang tidak memenuhi salah satu kondisi subkueri yang dikembalikan. Parameter ini setara dengan operator NOT.

filterQueries

Daftar subkueri. Hanya baris yang memenuhi semua filter yang dikembalikan. Filter mirip dengan kueri kecuali bahwa tidak ada skor relevansi yang dihitung dalam filter berdasarkan jumlah subfilter yang dipenuhi oleh sebuah baris.

shouldQueries

Daftar subkueri yang hasil kuerinya bisa cocok atau tidak cocok. Parameter ini setara dengan operator OR.

Hanya baris yang memenuhi jumlah minimum kondisi subkueri yang ditentukan oleh parameter shouldQueries yang dikembalikan.

Skor relevansi keseluruhan yang lebih tinggi menunjukkan bahwa lebih banyak kondisi subkueri yang ditentukan oleh parameter shouldQueries terpenuhi.

minimumShouldMatch

Jumlah minimum kondisi subkueri yang ditentukan oleh parameter shouldQueries yang harus dipenuhi oleh baris yang dikembalikan. Jika tidak ada kondisi subkueri lain selain kondisi subkueri yang ditentukan oleh parameter shouldQueries yang ditentukan, nilai default dari parameter minimumShouldMatch adalah 1. Jika kondisi subkueri lainnya, seperti kondisi subkueri yang ditentukan oleh parameter mustQueries, mustNotQueries, dan filterQueries ditentukan, nilai default dari parameter minimumShouldMatch adalah 0.

getTotalCount

Menentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default dari parameter ini adalah false, yang menentukan bahwa jumlah total baris yang memenuhi kondisi kueri tidak dikembalikan.

Jika Anda mengatur parameter ini ke true, kinerja kueri akan terpengaruh.

tableName

Nama tabel data.

indexName

Nama indeks pencarian.

columnsToGet

Menentukan apakah akan mengembalikan semua kolom dari setiap baris yang memenuhi kondisi kueri. Anda dapat mengonfigurasi bidang returnAll dan columns untuk parameter ini.

Nilai default dari bidang returnAll adalah false, yang menentukan bahwa tidak semua kolom dikembalikan. Dalam hal ini, Anda dapat menggunakan bidang columns untuk menentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan kolom yang ingin Anda kembalikan, hanya kolom kunci utama yang dikembalikan.

Jika Anda mengatur bidang returnAll ke true, semua kolom dikembalikan.

Contoh

Berikut adalah contoh cara melakukan kueri Boolean.

Kueri baris yang memenuhi semua kondisi subkueri

Saat mengkueri baris yang memenuhi semua kondisi subkueri, Anda dapat menentukan apakah skor relevansi perlu dihitung sesuai dengan kebutuhan bisnis Anda.

Menghitung skor relevansi untuk baris

Berikut adalah contoh kode untuk melakukan kueri Boolean yang mengkueri baris yang memenuhi semua kondisi subkueri serta menghitung skor relevansinya.

/**
 * Lakukan kueri Boolean untuk mengkueri baris yang memenuhi semua kondisi subkueri. 
 * @param client
 */
public static void andQuery(SyncClient client){
    /**
     * Kondisi 1: Lakukan kueri rentang untuk mengkueri baris di mana nilai kolom Col_Long lebih besar dari 3. 
     */
    RangeQuery rangeQuery = new RangeQuery();
    rangeQuery.setFieldName("Col_Long");
    rangeQuery.greaterThan(ColumnValue.fromLong(3));

    /**
     * Kondisi 2: Lakukan kueri tepat untuk mengkueri baris di mana nilai kolom Col_Keyword adalah hangzhou. 
     */
    MatchQuery matchQuery = new MatchQuery();
    matchQuery.setFieldName("Col_Keyword");
    matchQuery.setText("hangzhou");

    SearchQuery searchQuery = new SearchQuery();
    {
        /**
         * Konstruksi kueri Boolean yang hasil kuerinya memenuhi baik Kondisi 1 maupun Kondisi 2. 
         */
        BoolQuery boolQuery = new BoolQuery();
        boolQuery.setMustQueries(Arrays.asList(rangeQuery, matchQuery));
        searchQuery.setQuery(boolQuery);
        //searchQuery.setGetTotalCount(true);// Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. 

        SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
        // Anda dapat mengonfigurasi parameter columnsToGet untuk menentukan kolom yang akan dikembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci utama yang dikembalikan. 
        //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        //columnsToGet.setReturnAll(true); // Atur parameter ReturnAll ke true untuk mengembalikan semua kolom. 
        //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. 
        //searchRequest.setColumnsToGet(columnsToGet);

        SearchResponse resp = client.search(searchRequest);
        //System.out.println("TotalCount: " + resp.getTotalCount()); // Tentukan bahwa jumlah total baris yang memenuhi kondisi kueri bukan jumlah baris yang dikembalikan yang ditampilkan. 
        System.out.println("Row: " + resp.getRows());
    }
}

Jangan hitung skor relevansi untuk baris

Berikut adalah contoh kode untuk melakukan kueri Boolean yang mengkueri baris yang memenuhi semua kondisi subkueri tanpa menghitung skor relevansi.

/**
     * Lakukan kueri Boolean untuk mengkueri baris yang memenuhi semua kondisi subkueri tanpa menghitung skor relevansi untuk baris.
     * @param client
     */
    public static void filtersQuery(SyncClient client){
        /**
         * Kondisi 1: Lakukan kueri rentang untuk mengkueri baris di mana nilai kolom Col_Long lebih besar dari 3. 
         */
        RangeQuery rangeQuery = new RangeQuery();
        rangeQuery.setFieldName("Col_Long");
        rangeQuery.greaterThan(ColumnValue.fromLong(3));

        /**
         * Kondisi 2: Lakukan kueri tepat untuk mengkueri baris di mana nilai kolom Col_Keyword adalah hangzhou. 
         */
        MatchQuery matchQuery = new MatchQuery();
        matchQuery.setFieldName("Col_Keyword");
        matchQuery.setText("hangzhou");

        SearchQuery searchQuery = new SearchQuery();
        {
            /**
             * Konstruksi kueri Boolean yang hasil kuerinya memenuhi baik Kondisi 1 maupun Kondisi 2. 
             */
            BoolQuery boolQuery = new BoolQuery();
            boolQuery.setFilterQueries(Arrays.asList(rangeQuery, matchQuery));
            searchQuery.setQuery(boolQuery);
            //searchQuery.setGetTotalCount(true);// Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. 

            SearchRequest searchRequest = new SearchRequest("sampleTable", "sampleSearchIndex", searchQuery);
            // Anda dapat mengonfigurasi parameter columnsToGet untuk menentukan kolom yang akan dikembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci utama yang dikembalikan. 
            //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
            //columnsToGet.setReturnAll(true); // Atur parameter ReturnAll ke true untuk mengembalikan semua kolom. 
            //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. 
            //searchRequest.setColumnsToGet(columnsToGet);

            SearchResponse resp = client.search(searchRequest);
            //System.out.println("TotalCount: " + resp.getTotalCount()); // Tentukan bahwa jumlah total baris yang memenuhi kondisi kueri bukan jumlah baris yang dikembalikan yang ditampilkan. 
            System.out.println("Row: " + resp.getRows());
        }
    }

Kueri baris yang memenuhi setidaknya salah satu kondisi subkueri

Berikut adalah contoh kode untuk melakukan kueri Boolean yang mengkueri baris yang memenuhi setidaknya salah satu kondisi subkueri yang ditentukan:

/**
 * Lakukan kueri Boolean untuk mengkueri baris yang memenuhi setidaknya salah satu kondisi subkueri yang ditentukan. 
 * @param client
 */
public static void orQuery(SyncClient client) {

    /**
     * Kondisi 1: Lakukan kueri rentang untuk mengkueri baris di mana nilai kolom Col_Long lebih besar dari 3. 
     */
    RangeQuery rangeQuery = new RangeQuery();
    rangeQuery.setFieldName("Col_Long");
    rangeQuery.greaterThan(ColumnValue.fromLong(3));

    /**
     * Kondisi 2: Lakukan kueri tepat untuk mengkueri baris di mana nilai kolom Col_Keyword adalah hangzhou. 
     */
    MatchQuery matchQuery = new MatchQuery();
    matchQuery.setFieldName("Col_Keyword");
    matchQuery.setText("hangzhou");

    SearchQuery searchQuery = new SearchQuery();
    {
    /**
     * Konstruksi kueri Boolean yang hasil kuerinya memenuhi setidaknya salah satu dari Kondisi 1 dan Kondisi 2. 
     */
    BoolQuery boolQuery = new BoolQuery();
    boolQuery.setShouldQueries(Arrays.asList(rangeQuery, matchQuery));
    boolQuery.setMinimumShouldMatch(1); // Tentukan bahwa hasil memenuhi setidaknya salah satu kondisi subkueri. 
    searchQuery.setQuery(boolQuery);
    //searchQuery.setGetTotalCount(true);// Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. 

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    // Anda dapat mengonfigurasi parameter columnsToGet untuk menentukan kolom yang akan dikembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci utama yang dikembalikan. 
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // Atur parameter ReturnAll ke true untuk mengembalikan semua kolom. 
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. 
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // Tentukan bahwa jumlah total baris yang memenuhi kondisi kueri bukan jumlah baris yang dikembalikan yang ditampilkan.
    System.out.println("Row: " + resp.getRows());
    }
}

Kueri baris yang tidak memenuhi kondisi subkueri apa pun

Berikut adalah contoh kode untuk melakukan kueri Boolean yang mengkueri baris yang tidak memenuhi kondisi subkueri apapun:

/**
 * Lakukan kueri Boolean untuk mengkueri baris yang tidak memenuhi kondisi subkueri apa pun. 
 * @param client
 */
public static void notQuery(SyncClient client) {

    /**
     * Kondisi 1: Lakukan kueri tepat untuk mengkueri baris di mana nilai kolom Col_Keyword adalah hangzhou. 
     */
    MatchQuery matchQuery = new MatchQuery();
    matchQuery.setFieldName("Col_Keyword");
    matchQuery.setText("hangzhou");

    SearchQuery searchQuery = new SearchQuery();
    {
        /**
         * Konstruksi kueri Boolean yang hasil kuerinya tidak memenuhi Kondisi 1. 
         */
        BoolQuery boolQuery = new BoolQuery();
        boolQuery.setMustNotQueries(Arrays.asList(matchQuery));
        searchQuery.setQuery(boolQuery);
        //searchQuery.setGetTotalCount(true);// Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. 

        SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
        // Anda dapat mengonfigurasi parameter columnsToGet untuk menentukan kolom yang akan dikembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci utama yang dikembalikan. 
        //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        //columnsToGet.setReturnAll(true); // Atur parameter ReturnAll ke true untuk mengembalikan semua kolom. 
        //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. 
        //searchRequest.setColumnsToGet(columnsToGet);

        SearchResponse resp = client.search(searchRequest);
        //System.out.println("TotalCount: " + resp.getTotalCount()); // Tentukan bahwa jumlah total baris yang memenuhi kondisi kueri bukan jumlah baris yang dikembalikan yang ditampilkan. 
        System.out.println("Row: " + resp.getRows());
    }
}

Kueri baris yang memenuhi kombinasi kondisi subkueri

Berikut adalah contoh kode untuk melakukan kueri Boolean yang mengkueri baris yang memenuhi kombinasi kondisi subkueri, yaitu (col2<4 atau col3<5) atau (col2 = 4 dan (col3 = 5 atau col3 =6)). Dalam kombinasi ini, subkueri Boolean dihubungkan oleh operator AND atau OR.

/**
 * (col2<4 atau col3<5) atau (col2 = 4 dan (col3 = 5 atau col3 =6))
 * Subkueri Boolean dihubungkan oleh operator AND atau OR. 
 * @param client
*/
private static void boolQuery2(SyncClient client){
        // Kondisi 1: Nilai kolom col2 kurang dari 4. 
        RangeQuery rangeQuery1 = new RangeQuery();
        rangeQuery1.setFieldName("col2");
        rangeQuery1.lessThan(ColumnValue.fromLong(4));

        // Kondisi 2: Nilai kolom col3 kurang dari 5. 
        RangeQuery rangeQuery2 = new RangeQuery();
        rangeQuery2.setFieldName("col3");
        rangeQuery2.lessThan(ColumnValue.fromLong(5));

        // Kondisi 3: Nilai kolom col2 sama dengan 4. 
        TermQuery termQuery = new TermQuery();
        termQuery.setFieldName("col2");
        termQuery.setTerm(ColumnValue.fromLong(4));

        // Kondisi 4: Nilai kolom col3 sama dengan 5 atau nilai kolom col3 sama dengan 6. 
        TermsQuery termsQuery = new TermsQuery();
        termsQuery.setFieldName("col3");
        termsQuery.addTerm(ColumnValue.fromLong(5));
        termsQuery.addTerm(ColumnValue.fromLong(6));

        SearchQuery searchQuery = new SearchQuery();

        List<Query> queryList1 = new ArrayList<>();
        queryList1.add(rangeQuery1);
        queryList1.add(rangeQuery2);

        // Kondisi komposit 1: Nilai kolom col2 kurang dari 4 atau nilai kolom col3 kurang dari 5. 
        BoolQuery boolQuery1 = new BoolQuery();
        boolQuery1.setShouldQueries(queryList1);

        // Kondisi komposit 2: Nilai kolom col2 sama dengan 4 dan nilai kolom col3 sama dengan 5 atau 6. 
        List<Query> queryList2 = new ArrayList<>();
        queryList2.add(termQuery);
        queryList2.add(termsQuery);

        BoolQuery boolQuery2 = new BoolQuery();
        boolQuery2.setMustQueries(queryList2);

        // Kondisi komposit: Nilai kolom col2 kurang dari 4 atau nilai kolom col3 kurang dari 5, atau nilai kolom col2 sama dengan 4 dan nilai kolom col3 sama dengan 5 atau 6. 

        List<Query> queryList3 = new ArrayList<>();
        queryList3.add(boolQuery1);
        queryList3.add(boolQuery2);

        BoolQuery boolQuery = new BoolQuery();
        boolQuery.setShouldQueries(queryList3);

        searchQuery.setQuery(boolQuery);
        //searchQuery.setGetTotalCount(true);// Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. 

        SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
        // Anda dapat mengonfigurasi parameter columnsToGet untuk menentukan kolom yang akan dikembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci utama yang dikembalikan. 
        //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        //columnsToGet.setReturnAll(true); // Atur parameter ReturnAll ke true untuk mengembalikan semua kolom. 
        //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. 
        //searchRequest.setColumnsToGet(columnsToGet);

        SearchResponse response = client.search(searchRequest);
        //System.out.println("TotalCount: " + resp.getTotalCount()); // Tentukan bahwa jumlah total baris yang memenuhi kondisi kueri bukan jumlah baris yang dikembalikan yang ditampilkan. 
        System.out.println(response.getRows());

    }

Pertanyaan Umum

Referensi

  • Saat menggunakan indeks pencarian untuk mengkueri data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri multi-tepat, kueri cocok semua, kueri cocok, kueri frasa cocok, kueri awalan, kueri rentang, kueri wildcard, kueri geo, kueri vektor KNN, kueri Boolean, kueri bersarang, dan kueri eksistensi. Setelah membuat indeks pencarian, Anda dapat menggunakan metode kueri tersebut untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.

    Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur pengurutan dan pemisahan halaman. Untuk informasi lebih lanjut, lihat Melakukan Pengurutan dan Pemisahan Halaman.

    Anda dapat menggunakan fitur collapse (distinct) untuk meruntuhkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari jenis tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (Distinct).

  • Untuk menganalisis data dalam tabel, Anda dapat memanggil operasi Pencarian untuk menggunakan fitur agregasi atau kueri SQL. Misalnya, Anda dapat mengkueri nilai maksimum, minimum, jumlah nilai, dan jumlah baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.

  • Jika Anda ingin mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Pemindaian Paralel.