All Products
Search
Document Center

Tablestore:Kueri JSON

Last Updated:Jul 28, 2026

Anda dapat menggunakan Tablestore SDK for Java untuk mengkueri subfield dari field JSON Object atau Nested dalam search index. Field Object tidak mempertahankan batas objek anak, sedangkan field Nested mempertahankannya.

Prasyarat

  • Instal Tablestore SDK for Java dan inisialisasi klien.

  • Field target dikonfigurasi sebagai field JSON dalam search index, dan jsonType diatur ke OBJECT atau NESTED. Untuk informasi selengkapnya, lihat Create a search index.

Deskripsi fitur

Kueri JSON tidak menggunakan jenis kueri khusus. Pilih metode kueri berdasarkan nilai jsonType dari field JSON dalam search index.

Jenis JSON

Hubungan field

Metode kueri

Object

Tidak mempertahankan batas objek dalam array. Kondisi kueri yang berbeda dapat dipenuhi oleh objek yang berbeda.

Gunakan langsung jenis kueri yang sesuai dengan tipe subfield dan kebutuhan pencocokan. Tentukan path lengkap dalam setiap nama subfield.

Nested

Menyimpan setiap objek dalam array sebagai baris anak independen dan mempertahankan hubungan antar field dalam objek yang sama.

Bungkus subkueri dalam NestedQuery dan gunakan path untuk menentukan path lengkap field Nested.

Sebagai contoh, asumsikan kolom address dalam tabel bertipe String dan menyimpan array JSON berikut:

[
  { "country": "China", "city": "hangzhou" },
  { "country": "usa", "city": "Seattle" }
]

Jika Anda mengkueri country="China" dan city="Seattle", baris tersebut dikembalikan ketika address dikonfigurasi sebagai field Object karena objek yang berbeda dapat memenuhi kedua kondisi tersebut. Baris tersebut tidak dikembalikan ketika address dikonfigurasi sebagai field Nested karena tidak ada satu objek pun yang memenuhi kedua kondisi tersebut.

Panggil metode search untuk menjalankan kueri JSON.

SearchResponse search(SearchRequest request)
Catatan

subFieldSchemas dari field JSON tidak boleh berisi field Vector.

Kueri field Object

Contoh berikut mengkueri baris-baris di mana address.country bernilai China dan address.city bernilai Seattle. Karena address adalah field Object, objek yang berbeda dapat memenuhi kedua kondisi tersebut.

String tableName = "example_table";
String indexName = "example_index";

TermQuery countryQuery = new TermQuery();
countryQuery.setFieldName("address.country");
countryQuery.setTerm(ColumnValue.fromString("China"));

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("address.city");
cityQuery.setTerm(ColumnValue.fromString("Seattle"));

BoolQuery objectQuery = new BoolQuery();
objectQuery.setMustQueries(Arrays.asList(countryQuery, cityQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(objectQuery);
searchQuery.setLimit(10);

SearchRequest request =
        new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
System.out.println(response.getRows());

Kueri field Nested

Contoh berikut mengkueri baris-baris di mana objek yang sama dalam address memiliki nilai address.country sebesar China dan nilai address.city sebesar Seattle. Untuk informasi selengkapnya tentang metode dan parameter kueri untuk field Nested, lihat Nested query.

String tableName = "example_table";
String indexName = "example_index";

TermQuery countryQuery = new TermQuery();
countryQuery.setFieldName("address.country");
countryQuery.setTerm(ColumnValue.fromString("China"));

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("address.city");
cityQuery.setTerm(ColumnValue.fromString("Seattle"));

BoolQuery childQuery = new BoolQuery();
childQuery.setMustQueries(Arrays.asList(countryQuery, cityQuery));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("address");
nestedQuery.setQuery(childQuery);
nestedQuery.setScoreMode(ScoreMode.None);

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

SearchRequest request =
        new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
System.out.println(response.getRows());

Parameter

Permintaan pencarian

request bertipe SearchRequest dan berisi parameter berikut.

Nama

Tipe

Deskripsi

tableName (wajib)

String

Nama tabel.

indexName (wajib)

String

Nama search index.

searchQuery (wajib)

SearchQuery

Kondisi kueri dan konfigurasi kueri umum.

columnsToGet (opsional)

SearchRequest.ColumnsToGet

Konfigurasi kolom yang akan dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci primer yang dikembalikan.

timeoutInMillisecond (opsional)

int

Periode timeout kueri tingkat permintaan dalam milidetik. Nilai default-nya adalah -1, yang berarti tidak ada periode timeout kueri terpisah yang dikonfigurasi.

routingValues (opsional)

List<PrimaryKey>

Nilai kunci primer yang sesuai dengan bidang routing kustom. Anda tidak perlu mengonfigurasi parameter ini jika routing kustom tidak digunakan.

Konfigurasi kueri

request.searchQuery bertipe SearchQuery dan berisi parameter berikut.

Nama

Tipe

Deskripsi

query (wajib)

Query

Kondisi kueri. Untuk field Object, langsung atur jenis kueri yang sesuai dengan tipe subfield dan kebutuhan pencocokan. Untuk field Nested, atur parameter ini ke objek NestedQuery.

offset (opsional)

Integer

Posisi awal kueri saat ini.

limit (opsional)

Integer

Jumlah maksimum baris yang dikembalikan. Jika Anda mengatur parameter ini ke 0, tidak ada baris yang dikembalikan.

highlight (opsional)

Highlight

Konfigurasi ringkasan dan penyorotan. Untuk field Nested, konfigurasikan ringkasan dan penyorotan untuk baris anak yang cocok menggunakan NestedQuery.innerHits.

collapse (opsional)

Collapse

Konfigurasi penggabungan hasil, yang menghapus hasil duplikat berdasarkan field tertentu.

sort (opsional)

Sort

Metode pengurutan hasil.

trackTotalCount (opsional)

int

Jumlah maksimum baris yang cocok yang diharapkan untuk dihitung. Nilai default-nya adalah TRACK_TOTAL_COUNT_DISABLED, yang menonaktifkan penghitungan. Atur parameter ini ke TRACK_TOTAL_COUNT untuk menghitung semua baris yang cocok. Nilai yang lebih kecil memberikan performa kueri yang lebih baik.

filter (opsional)

SearchFilter

Filter yang diterapkan pada hasil query.

aggregationList (opsional)

List<Aggregation>

Konfigurasi agregasi.

groupByList (opsional)

List<GroupBy>

Konfigurasi pengelompokan.

token (opsional)

byte[]

Token paginasi. Atur parameter ini ke nilai nextToken dari respons sebelumnya untuk melanjutkan pembacaan data. Ketika token diatur, SDK mengosongkan sort karena token tersebut sudah berisi kondisi pengurutan.

Kondisi kueri Nested

Saat Anda mengkueri field Nested, request.searchQuery.query bertipe NestedQuery dan berisi parameter berikut.

Nama

Tipe

Deskripsi

path (wajib)

String

Path field Nested yang akan dikueri. Untuk mengkueri field Nested multi-level, tentukan path lengkap field target.

query (wajib)

Query

Kondisi kueri yang dijalankan pada baris anak di path. Tentukan path lengkap dalam setiap nama subfield.

scoreMode (wajib)

ScoreMode

Metode yang digunakan untuk menghitung skor baris induk ketika beberapa baris anak cocok. None tidak menghitung skor relevansi untuk baris anak. Avg, Max, Min, dan Total masing-masing menggunakan rata-rata, maksimum, minimum, dan jumlah skor baris anak.

innerHits (opsional)

InnerHits

Konfigurasi yang digunakan untuk mengembalikan, mengurutkan, membagi halaman, dan menyoroti baris anak yang cocok. Jika Anda tidak mengonfigurasi parameter ini, detail baris anak yang cocok tidak dikembalikan.

weight (opsional)

float

Bobot kueri. Nilai default-nya adalah 1.0, dan nilainya harus berupa bilangan titik mengambang positif. Nilai yang lebih besar meningkatkan skor baris yang cocok tetapi tidak mengubah cakupan pencocokan.

Konfigurasi pengembalian baris anak

request.searchQuery.query.innerHits bertipe InnerHits dan berisi parameter berikut.

Nama

Tipe

Deskripsi

sort (opsional)

Sort

Metode pengurutan baris anak yang cocok. ScoreSort dan DocSort didukung. FieldSort tidak didukung.

offset (opsional)

Integer

Posisi awal pengembalian baris anak yang cocok.

limit (opsional)

Integer

Jumlah maksimum baris anak yang cocok yang dikembalikan. Nilai default-nya adalah 3.

highlight (opsional)

Highlight

Konfigurasi ringkasan dan penyorotan untuk baris anak yang cocok.

Kolom yang dikembalikan

request.columnsToGet bertipe SearchRequest.ColumnsToGet dan berisi parameter berikut.

Nama

Tipe

Deskripsi

columns (opsional)

List<String>

Nama kolom atribut yang dikembalikan. Konfigurasikan parameter ini hanya ketika returnAll dan returnAllFromIndex keduanya bernilai false. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci primer yang dikembalikan.

returnAll (opsional)

boolean

Menentukan apakah semua kolom atribut dalam tabel dikembalikan. Nilai default-nya adalah false.

returnAllFromIndex (opsional)

boolean

Menentukan apakah semua kolom atribut yang diindeks dikembalikan. Nilai default-nya adalah false. Anda tidak dapat mengatur parameter ini dan returnAll secara bersamaan ke true.

Respons

Metode search mengembalikan objek SearchResponse. Tabel berikut menjelaskan field utamanya.

Nama

Tipe

Deskripsi

totalCount

long

Jumlah baris yang cocok. Panggil getTotalCount() untuk mendapatkan nilainya. Nilai ini bergantung pada konfigurasi trackTotalCount.

rows

List<Row>

Baris yang dikembalikan oleh kueri saat ini. Panggil getRows() untuk mendapatkan nilainya. Jumlah baris tidak melebihi limit.

searchHits

List<SearchHit>

Hasil kueri. Panggil getSearchHits() untuk mendapatkan nilainya. Dari field ini, Anda dapat memperoleh baris yang cocok, skor, hasil ringkasan dan penyorotan, serta baris anak yang cocok dari field Nested.

nextToken

byte[]

Token untuk halaman berikutnya. Panggil getNextToken() untuk mendapatkan nilainya. Jika nilainya bukan null, gunakan sebagai token dalam permintaan berikutnya untuk melanjutkan pembacaan data.

isAllSuccess

boolean

Menunjukkan apakah semua partisi indeks telah dikueri. Panggil isAllSuccess() untuk mendapatkan nilainya. Jika nilainya false, hanya hasil parsial yang dikembalikan, dan totalCount mungkin kurang dari jumlah aktual baris yang cocok.