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
jsonTypediatur keOBJECTatauNESTED. 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 |
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)
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 |
|
routingValues (opsional) |
|
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 |
|
offset (opsional) |
Integer |
Posisi awal kueri saat ini. |
|
limit (opsional) |
Integer |
Jumlah maksimum baris yang dikembalikan. Jika Anda mengatur parameter ini ke |
|
highlight (opsional) |
Highlight |
Konfigurasi ringkasan dan penyorotan. Untuk field Nested, konfigurasikan ringkasan dan penyorotan untuk baris anak yang cocok menggunakan |
|
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 |
|
filter (opsional) |
SearchFilter |
Filter yang diterapkan pada hasil |
|
aggregationList (opsional) |
|
Konfigurasi agregasi. |
|
groupByList (opsional) |
|
Konfigurasi pengelompokan. |
|
token (opsional) |
byte[] |
Token paginasi. Atur parameter ini ke nilai |
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 |
|
scoreMode (wajib) |
ScoreMode |
Metode yang digunakan untuk menghitung skor baris induk ketika beberapa baris anak cocok. |
|
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 |
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. |
|
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 |
|
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) |
|
Nama kolom atribut yang dikembalikan. Konfigurasikan parameter ini hanya ketika |
|
returnAll (opsional) |
boolean |
Menentukan apakah semua kolom atribut dalam tabel dikembalikan. Nilai default-nya adalah |
|
returnAllFromIndex (opsional) |
boolean |
Menentukan apakah semua kolom atribut yang diindeks dikembalikan. Nilai default-nya adalah |
Respons
Metode search mengembalikan objek SearchResponse. Tabel berikut menjelaskan field utamanya.
|
Nama |
Tipe |
Deskripsi |
|
totalCount |
long |
Jumlah baris yang cocok. Panggil |
|
rows |
|
Baris yang dikembalikan oleh kueri saat ini. Panggil |
|
searchHits |
|
Hasil kueri. Panggil |
|
nextToken |
byte[] |
Token untuk halaman berikutnya. Panggil |
|
isAllSuccess |
boolean |
Menunjukkan apakah semua partisi indeks telah dikueri. Panggil |