Indeks pencarian mendukung bidang tipe Array selain bidang tipe dasar seperti Long, Double, Boolean, Keyword, dan Text. Anda dapat menggunakan bidang tipe Array untuk menyimpan elemen-elemen dari tipe dasar. Dengan menentukan kondisi ARRAY_EXTRACT sebagai klausa WHERE dalam pernyataan SELECT, Anda dapat menjalankan pernyataan tersebut untuk menanyakan bidang tipe Array dalam indeks pencarian. Topik ini menjelaskan cara menjalankan pernyataan SQL untuk menanyakan bidang tipe Array.
Untuk informasi lebih lanjut tentang tipe Array, lihat ARRAY.
Catatan penggunaan
Anda tidak dapat menjalankan pernyataan SQL untuk menanyakan bidang tipe
Geo-pointdalam indeks pencarian.Array hanya dapat digunakan sebagai tipe suatu bidang dalam indeks pencarian jika kolom tempat bidang tersebut dipetakan di tabel data bertipe String. Saat membuat indeks pencarian, Anda harus menyetel tipe bidang ke tipe sebenarnya dari elemen-elemen yang ingin disimpan dalam array dan mengaktifkan atribut Array untuk bidang tersebut.
Pemetaan tipe data
Tipe data dalam tabel data | Tipe data dalam indeks pencarian | Tipe data dalam SQL |
String | Tipe bidang sama dengan tipe sebenarnya dari elemen-elemen yang ingin Anda gunakan array untuk menyimpannya. Array diaktifkan untuk bidang tersebut di konsol Tablestore atau parameter IsArray disetel ke true untuk bidang tersebut dengan menggunakan SDK Tablestore. |
|
Prasyarat
Sebuah tabel data telah dibuat dan data telah ditulis ke dalam tabel tersebut. Untuk informasi lebih lanjut, lihat Operasi pada Tabel dan Menulis Data.
Prosedur
Untuk menanyakan bidang tipe Array dengan menjalankan pernyataan SQL, Anda harus membuat indeks pencarian untuk tabel data, membuat tabel pemetaan untuk indeks pencarian, dan kemudian menjalankan pernyataan SQL untuk menanyakan bidang tipe Array dalam indeks pencarian.
Langkah 1: Buat indeks pencarian
Untuk menyimpan elemen menggunakan bidang tipe Array, saat membuat indeks pencarian, aktifkan Array untuk bidang tersebut di konsol Tablestore atau setel parameter IsArray ke true untuk bidang tersebut menggunakan SDK Tablestore. Untuk informasi lebih lanjut, lihat Buat Indeks Pencarian.
Langkah 2: Buat tabel pemetaan untuk indeks pencarian
Untuk menanyakan bidang tipe Array dalam indeks pencarian dengan menjalankan pernyataan SQL, Anda harus membuat tabel pemetaan untuk indeks pencarian. Untuk informasi lebih lanjut tentang cara membuat tabel pemetaan, lihat Buat Tabel Pemetaan untuk Indeks Pencarian.
Dalam pernyataan CREATE TABLE, tentukan nama yang valid dan tipe data yang dipetakan dalam SQL untuk setiap bidang tipe Array. Saat membuat tabel pemetaan untuk indeks pencarian, kami merekomendasikan menentukan tipe MEDIUMTEXT sebagai tipe data yang dipetakan dalam SQL untuk bidang tipe Array.
Contoh pernyataan SQL berikut memberikan contoh cara membuat tabel pemetaan untuk indeks pencarian yang berisi bidang tipe Array:
CREATE TABLE `test_table__test_table_index`(
`col_keyword_array` MEDIUMTEXT,
`col_long_array` MEDIUMTEXT
)
ENGINE='searchindex'
ENGINE_ATTRIBUTE='{"index_name":"test_table_index", "table_name":"test_table"}';Langkah 3: Jalankan pernyataan SQL untuk menanyakan data menggunakan indeks pencarian
Untuk menanyakan bidang tipe Array dengan menjalankan pernyataan SQL, gunakan fungsi ARRAY_EXTRACT(col_name). Dalam fungsi ini, col_name menentukan nama bidang tipe Array. Fungsi ini dapat digunakan bersama operator sebagai kondisi kueri. Contoh: ARRAY_EXTRACT(col_long_array) = 1.
Saat menjalankan pernyataan SQL untuk menanyakan bidang tipe Array, Anda tidak dapat menggunakan bidang tipe Array bersama operator.
Sebagai contoh, indeks pencarian berisi bidang tipe Array bernama col_long_array, tipe kolom tempat bidang tersebut dipetakan dalam tabel data adalah String, dan bidang tipe Array menyimpan elemen-elemen bertipe Long. Anda dapat menjalankan pernyataan SQL berikut untuk menanyakan baris-baris di mana bidang col_long_array tipe Array berisi elemen dengan nilai 1:
SELECT * FROM `test_table__test_table_index` WHERE ARRAY_EXTRACT(col_long_array) = 1;Batasan
Fungsi
ARRAY_EXTRACT(col_name)hanya dapat digunakan sebagai kondisi untuk menanyakan bidang tipe Array ketika menjalankan pernyataan SQL menggunakan tabel pemetaan yang dibuat untuk indeks pencarian. Hanya satu bidang tipe Array yang dapat ditentukan dalam fungsi tersebut. Fungsi ini dapat digunakan sebagai klausa WHERE dari pernyataan SELECT tetapi tidak dapat digunakan sebagai ekspresi kolom dari pernyataan SELECT, fungsi agregat, atau untuk pengurutan.Bidang tipe Array dapat digunakan sebagai bidang atau ekspresi kolom dalam pernyataan SELECT tetapi tidak dapat digunakan sebagai fungsi agregat atau untuk pengurutan.
Jika Anda menggunakan fungsi
ARRAY_EXTRACT(col_name)bersama operator sebagai kondisi kueri, Anda tidak dapat melakukan perhitungan setelah tipe elemen dalam bidang tipe Array dikonversi. Pastikan bahwa tipe elemen dalam bidang tipe Array valid. Sebagai contoh, bidang col_long_array adalah tipe Array dan menyimpan elemen-elemen bertipe Long. Anda dapat menggunakanarray_extract(col_long_array) = 1sebagai kondisi kueri untuk melakukan perhitungan. Namun, Anda tidak dapat menggunakanarray_extract(col_long_array) = '1'sebagai kondisi kueri untuk melakukan perhitungan.Jika tipe elemen dalam bidang tipe Array adalah
Text, Anda harus menggunakan fungsi ARRAY_EXTRACT(col_name) bersama dengan fungsitext_match()atautext_match_phrase()yang disediakan oleh pencarian teks lengkap. Contoh:text_match(array_extract(col_text), "xxx"). Untuk informasi tentang pencarian teks lengkap, lihat Pencarian Teks Lengkap.
Contoh
Dalam contoh ini, sebuah tabel data bernama test_table digunakan. Tabel data berisi kolom col_keyword_array bertipe String dan kolom col_long_array bertipe String.
Buat indeks pencarian. Untuk informasi lebih lanjut, lihat Gunakan Konsol Tablestore dan Gunakan SDK Tablestore.
Dalam contoh ini, sebuah indeks pencarian bernama
test_table_indexdibuat. Indeks pencarian berisi dua bidang tipe Array: bidangcol_keyword_arrayyang menyimpan elemen-elemen bertipe Keyword dan bidangcol_long_arrayyang menyimpan elemen-elemen bertipe Long.Gambar berikut menunjukkan cara membuat indeks pencarian di konsol Tablestore.

Buat tabel pemetaan untuk indeks pencarian. Untuk informasi lebih lanjut, lihat Buat Tabel Pemetaan untuk Indeks Pencarian.
Dalam contoh ini, sebuah tabel pemetaan bernama
test_table__test_table_indexdibuat untuk indeks pencarian. Dalam tabel pemetaan, tipe bidangcol_keyword_arraydancol_long_arrayadalahMEDIUMTEXT.Anda dapat menjalankan pernyataan SQL berikut untuk membuat tabel pemetaan:
CREATE TABLE `test_table__test_table_index`( `col_keyword_array` MEDIUMTEXT, `col_long_array` MEDIUMTEXT ) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name":"test_table_index", "table_name":"test_table"}';Setelah membuat tabel pemetaan untuk indeks pencarian, jalankan pernyataan berikut untuk menanyakan data dari tabel pemetaan:
SELECT * FROM `test_table__test_table_index`;Gambar berikut menunjukkan hasil kueri. Dalam contoh ini, lima catatan data terdapat dalam tabel pemetaan
test_table__test_table_index.
Jalankan pernyataan SELECT untuk menanyakan data.
Dalam contoh ini, pernyataan SELECT dijalankan untuk menanyakan baris-baris di mana bidang
col_long_arraytipe Array berisi elemen dengan nilai 1 atau baris-baris di mana bidangcol_keyword_arraytipe Array berisi elemen dengan nilai yang dimulai dengan "d".SELECT * FROM test_table__test_table_index WHERE ARRAY_EXTRACT(col_long_array) = 1 OR ARRAY_EXTRACT(col_keyword_array) like 'd%';Gambar berikut menunjukkan hasil kueri.
