全部产品
Search
文档中心

Tablestore:Kueri JSON

更新时间:Dec 07, 2025

Data JSON dapat bertipe Object atau Nested. Untuk mengkueri objek JSON, Anda dapat langsung menggunakan tipe kueri yang diinginkan. Untuk mengkueri data JSON bertipe Nested, Anda harus membungkus kondisi kueri dalam NestedQuery.

Prasyarat

Batasan

Bidang bertipe Vector tidak dapat digunakan dalam JSON.

Skenario kueri

Misalkan sebuah tabel data memiliki kolom id bertipe String dan kolom address bertipe String, yang menyimpan data dalam format JSON.

Misalkan sebuah baris memiliki kolom address dengan nilai [{ "country": "China", "city": "hangzhou" }, { "country": "usa", "city": "Seattle" }]. Kueri untuk country="China" dan city="Seattle" tidak akan mengembalikan baris tersebut jika kolom address bertipe Nested. Namun, jika kolom tersebut bertipe Object, kueri tersebut akan mengembalikan baris tersebut.

Kode contoh

Contoh kueri tipe JSON Nested

Contoh berikut mengkueri baris-baris yang memenuhi dua kondisi dalam objek nested yang sama pada bidang address: address.country bernilai "China" dan address.city bernilai "Seattle".

public static void nestedQuery(SyncClient client) {
    // Kondisi 1: Nilai bidang country pada sub-baris address harus "China".
    TermQuery termQuery1 = new TermQuery();
    termQuery1.setFieldName("address.country");
    termQuery1.setTerm(ColumnValue.fromString("China"));

    // Kondisi 2: Nilai bidang city pada sub-baris address harus "Seattle".
    TermQuery termQuery2 = new TermQuery();
    termQuery2.setFieldName("address.city");
    termQuery2.setTerm(ColumnValue.fromString("Seattle"));

    // Gunakan kondisi AND dari BoolQuery untuk mengkueri sub-baris yang memenuhi kedua kondisi.
    List<Query> mustQueries = new ArrayList<>();
    mustQueries.add(termQuery1);
    mustQueries.add(termQuery2);
    BoolQuery boolQuery = new BoolQuery();
    boolQuery.setMustQueries(mustQueries);

    // Tetapkan BoolQuery di dalam NestedQuery agar satu sub-baris harus memenuhi beberapa kondisi kueri sekaligus.
    NestedQuery nestedQuery = new NestedQuery();    // Tetapkan tipe kueri menjadi NestedQuery.
    nestedQuery.setPath("address");   // Tetapkan path kolom bertipe nested, yaitu path induk dari bidang yang dikueri.
    nestedQuery.setQuery(boolQuery);
    nestedQuery.setScoreMode(ScoreMode.None);

    SearchQuery searchQuery = new SearchQuery();
    searchQuery.setQuery(nestedQuery);

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);

    SearchResponse resp = client.search(searchRequest);
    System.out.println("Row: " + resp.getRows());
}

Contoh kueri tipe JSON Object

Contoh berikut mengkueri baris-baris di mana bidang address memenuhi dua kondisi yang tersebar di berbagai objek nested-nya: address.country bernilai "China" dan address.city bernilai "Seattle".

public static void boolQuery(SyncClient client) {
    // Kondisi 1: Nilai bidang country pada sub-baris address harus "China".
    TermQuery termQuery1 = new TermQuery();
    termQuery1.setFieldName("address.country");
    termQuery1.setTerm(ColumnValue.fromString("China"));

    // Kondisi 2: Nilai bidang city pada sub-baris address harus "Seattle".
    TermQuery termQuery2 = new TermQuery();
    termQuery2.setFieldName("address.city");
    termQuery2.setTerm(ColumnValue.fromString("Seattle"));

    // Gunakan kondisi AND dari BoolQuery untuk mengkueri sub-baris yang memenuhi kedua kondisi.
    List<Query> mustQueries = new ArrayList<>();
    mustQueries.add(termQuery1);
    mustQueries.add(termQuery2);
    BoolQuery boolQuery = new BoolQuery();
    boolQuery.setMustQueries(mustQueries);


    SearchQuery searchQuery = new SearchQuery();
    searchQuery.setQuery(boolQuery);

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);

    SearchResponse resp = client.search(searchRequest);
    System.out.println("Row: " + resp.getRows());
}