Kueri exists, juga dikenal sebagai kueri NULL atau kueri nilai NULL, digunakan dalam data yang jarang untuk menentukan apakah kolom dari suatu baris ada. Sebagai contoh, Anda dapat memfilter baris di mana nilai kolom alamat tidak kosong.
Untuk melakukan kueri exists pada kolom Nested, gunakan kueri nested.
Untuk memeriksa apakah kolom berisi nilai kosong, gunakan ExistsQuery bersama dengan mustNotQueries dari BoolQuery.
Jika salah satu kondisi berikut terpenuhi, sistem menganggap bahwa kolom tersebut tidak ada. Contoh ini menggunakan kolom city.
Tipe kolom city dalam indeks pencarian adalah tipe dasar seperti kata kunci. Jika sebuah baris tidak memiliki kolom city dalam tabel data, indeks pencarian menganggap bahwa kolom city tidak ada.
Tipe kolom city dalam indeks pencarian adalah tipe dasar seperti kata kunci. Jika sebuah baris memiliki nilai kolom city sebagai array kosong ("city" = "[]"), indeks pencarian menganggap bahwa kolom city tidak ada.
Prasyarat
Klien Tablestore harus diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Tabel data harus dibuat dan data ditulis ke tabel. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
Indeks pencarian harus dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat indeks pencarian.
Parameter
Parameter | Deskripsi |
fieldName | Nama kolom yang ingin Anda kueri. |
query | Tipe kueri. Atur parameter ini ke ExistsQuery. |
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 kode sampel untuk memfilter semua baris di mana kolom tertentu tidak kosong.
public static void existQuery(SyncClient syncClient) {
// Memeriksa apakah kolom col_keyword ada. Kolom col_keyword bukan kolom bertipe Nested.
{
{
// Kode sampel berikut menunjukkan cara memeriksa apakah kolom bertipe non-Nested ada.
SearchQuery searchQuery = new SearchQuery();
ExistsQuery existQuery = new ExistsQuery(); // Atur tipe kueri ke ExistsQuery.
existQuery.setFieldName("col_keyword");
searchQuery.setQuery(existQuery);
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
SearchResponse resp = syncClient.search(searchRequest);
}
{
// Membuat builder.
SearchResponse resp = syncClient.search(SearchRequest.newBuilder()
.indexName("<SEARCH_INDEX_NAME>")
.tableName("<TABLE_NAME>")
.searchQuery(
SearchQuery.newBuilder()
.query(QueryBuilders.exists("col_keyword"))
.limit(10)
.build())
.build());
}
}
// Struktur Nested adalah [{"keyword":"a","long":123}].
{
// Memeriksa apakah kolom induk col_nested ada. Kolom col_nested bertipe Nested.
{
SearchResponse resp = syncClient.search(SearchRequest.newBuilder()
.indexName("<SEARCH_INDEX_NAME>")
.tableName("<TABLE_NAME>")
.searchQuery(
SearchQuery.newBuilder()
.query(QueryBuilders.nested()
.scoreMode(ScoreMode.None)
.path("col_nested")
.query(QueryBuilders.exists("col_nested")))
.limit(10)
.getTotalCount(false)
.build())
.build());
}
// Memeriksa apakah kolom col_nested.keyword ada. Kolom col_nested.keyword bertipe Nested.
{
SearchResponse resp = syncClient.search(SearchRequest.newBuilder()
.indexName("<SEARCH_INDEX_NAME>")
.tableName("<TABLE_NAME>")
.searchQuery(
SearchQuery.newBuilder()
.query(QueryBuilders.nested()
.scoreMode(ScoreMode.None)
.path("col_nested")
.query(QueryBuilders.exists("col_nested.keyword")))
.limit(10)
.getTotalCount(false)
.build())
.build());
}
}
}Pertanyaan Umum
Referensi
Saat menggunakan indeks pencarian untuk memfilter data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri terms, kueri match all, kueri match, kueri match phrase, kueri prefix, kueri range, kueri wildcard, kueri geo, kueri vektor KNN, kueri Boolean, kueri nested, dan kueri exists. Setelah membuat indeks pencarian, Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk memfilter data dari berbagai dimensi sesuai dengan kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur pengurutan dan paging. Untuk informasi lebih lanjut, lihat Melakukan pengurutan dan paging.
Anda dapat menggunakan fitur collapse (distinct) untuk merangkum set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari jenis tertentu muncul hanya sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Untuk menganalisis data dalam tabel, Anda dapat memanggil operasi Search untuk menggunakan fitur agregasi atau menggunakan fitur kueri SQL. Sebagai contoh, Anda dapat memfilter nilai maksimum dan minimum, jumlah nilai, dan jumlah baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Untuk 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.