Pemetaan indeks teks penuh menghubungkan tabel HBase ke indeks Search. Setiap pemetaan menentukan kolom HBase yang akan disinkronkan, cara meng-encode rowkey, serta tipe data setiap kolom. Halaman ini menjelaskan cara membuat, memperbarui, dan memeriksa pemetaan menggunakan HBase Shell.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membaca panduan Quick start
Mengunduh dan mengonfigurasi versi terbaru HBase Shell
Create a mapping
Simpan konfigurasi pemetaan dalam file JSON dan berikan ke HBase Shell. Contoh berikut memetakan dua kolom dari testTable ke indeks Search democollection.
{
"sourceNamespace": "default",
"sourceTable": "testTable",
"targetIndexName": "democollection",
"indexType": "SOLR",
"rowkeyFormatterType": "STRING",
"fields": [
{
"source": "f:name",
"targetField": "name_s",
"type": "STRING"
},
{
"source": "f:age",
"targetField": "age_i",
"type": "INT"
}
]
}Dalam contoh ini, data dari testTable disinkronkan ke democollection. Kolom f:name (family dan kualifikasi dipisahkan oleh :) dipetakan ke name_s dalam indeks, dan f:age dipetakan ke age_i.
Mapping parameters
| Parameter | Description |
|---|---|
sourceNamespace | Namespace tabel HBase. Biarkan kosong atau atur ke default jika tabel tidak memiliki namespace. |
sourceTable | Nama tabel HBase, tanpa namespace. |
targetIndexName | Nama indeks Search. |
indexType | Nilai tetap: SOLR. |
rowkeyFormatterType | Cara rowkey di-encode sebagai ID dokumen indeks. Nilai yang valid: STRING, HEX. Lihat Choose a rowkeyFormatterType. |
fields | Array JSON berisi pemetaan kolom. Pisahkan beberapa entri dengan koma. Lihat Configure field mappings. |
Choose a rowkeyFormatterType
rowkeyFormatterType menentukan cara rowkey HBase dikonversi menjadi bidang ID dalam indeks Search (yang selalu berupa string).
| Value | When to use | Encoding | Decoding |
|---|---|---|---|
STRING | Rowkey ditulis menggunakan Bytes.toBytes(String) — misalnya, row1, order0001, atau string "12345" | Bytes.toString(byte[]) | Bytes.toBytes(String) |
HEX | Rowkey bertipe numerik, kunci komposit yang mencakup bidang non-string, atau apa pun yang tidak ditulis menggunakan Bytes.toBytes(String) | Hex.encodeAsString(byte[]) dari org.apache.commons.codec.binary.Hex | Hex.decodeHex(String.toCharArray()) |
Cara memutuskan: Pertanyaan utamanya adalah bagaimana byte rowkey awalnya ditulis. Jika digunakan fungsi Bytes.toBytes(String), pilih STRING. Untuk semua kasus lainnya — termasuk rowkey numerik yang ditulis dengan Bytes.toBytes(int) atau Bytes.toBytes(long) — pilih HEX.
Jika data tidak ditulis ke tabel HBase menggunakan fungsi Bytes.toBytes(String), tipe datanya tidak dianggap sebagai STRING. Untuk mengimpor rowkey ke HBase, atur parameter ini ke HEX. Jika tidak, setelah Anda mengonversi ID dokumen dalam indeks kembali ke byte, hasilnya mungkin berbeda dari rowkey aslinya.
Configure field mappings
Setiap entri dalam array fields memetakan satu kolom HBase ke satu bidang indeks Search.
| Parameter | Description |
|---|---|
source | Kolom HBase yang akan dipetakan, dalam format family:qualifier. Misalnya, f:name. |
targetField | Nama bidang tujuan dalam indeks Search. Kolom dinamis — yaitu yang memiliki akhiran penanda tipe — secara otomatis dikenali tanpa memerlukan skema yang telah ditentukan sebelumnya. |
type | Tipe data kolom sebagaimana disimpan di HBase. Harus sesuai dengan cara data ditulis menggunakan Bytes.toBytes(). Nilai yang valid (sensitif terhadap huruf besar/kecil): INT, LONG, STRING, BOOLEAN, FLOAT, DOUBLE, SHORT, BIGDECIMAL. |
Dynamic columns
Layanan Search mendukung kolom dinamis, yang menggunakan konvensi penamaan akhiran untuk mengenali tipe bidang secara otomatis. Anda tidak perlu menentukan setiap bidang terlebih dahulu dalam set konfigurasi managed_schema.
Akhiran umum dan tipe yang sesuai:
| Suffix | Type |
|---|---|
_s | STRING |
_i | INT |
Sebagai contoh, name_s secara otomatis dikenali sebagai bidang STRING, dan age_i sebagai bidang INT. Untuk daftar lengkap akhiran yang didukung, lihat Update the configuration set.
How HBase data types work
HBase menyimpan semua data sebagai byte mentah. Parameter type memberi tahu layanan Search cara menafsirkan byte tersebut selama sinkronisasi.
int age = 25;
byte[] ageValue = Bytes.toBytes(age);
put.addColumn(Bytes.toBytes("f"), Bytes.toBytes("age"), ageValue);
String name = "25";
byte[] nameValue = Bytes.toBytes(name);
put.addColumn(Bytes.toBytes("f"), Bytes.toBytes("name"), nameValue);Dalam contoh ini, f:age bertipe INT dan f:name bertipe STRING — meskipun keduanya kebetulan menyimpan nilai 25. Menetapkan type yang salah menyebabkan layanan Search memanggil metode decode yang salah (misalnya, Bytes.toInt() pada kolom string), sehingga menghasilkan sinkronisasi data yang rusak atau gagal.
Tipe kolom sumber dan tipe bidang indeks tidak harus sama. Sebagai contoh, f:age dapat disimpan sebagai STRING di HBase, sedangkan targetField mengarah ke age_i (INT) dalam indeks. Layanan Search akan mengonversi nilainya secara otomatis. Jika nilai string tidak dapat dikonversi — misalnya, nilai non-numerik dalam bidang INT — maka terjadi error selama sinkronisasi.
Manage the schema
Gunakan perintah HBase Shell untuk melihat dan mengubah pemetaan setelah dibuat.
View the current mapping
Jalankan describe_external_index untuk mendapatkan skema pemetaan lengkap dalam format JSON:
hbase(main):005:0> describe_external_index 'testTable'Modify the mapping
Gunakan alter_external_index untuk mengganti seluruh skema pemetaan. Letakkan file schema.json di direktori startup HBase Shell, atau berikan jalur relatif atau jalur mutlak.
hbase(main):006:0> alter_external_index 'HBase table name', 'schema.json'Setiap pemanggilan alter_external_index mengganti seluruh skema. Untuk menambahkan, memperbarui, atau menghapus beberapa kolom sekaligus, sertakan semua kolom dalam satu file JSON.
Untuk menghapus semua pemetaan bidang dari tabel, atur fields menjadi array kosong:
{
"sourceNamespace": "default",
"sourceTable": "testTable",
"targetIndexName": "democollection",
"indexType": "SOLR",
"rowkeyFormatterType": "STRING",
"fields": []
}Add columns to the mapping
Gunakan add_external_index_field untuk menambahkan kolom individual tanpa mengganti seluruh skema:
hbase shell> add_external_index_field 'testTable', {FAMILY => 'f', QUALIFIER => 'money', TARGETFIELD => 'money_f', TYPE => 'FLOAT'}add_external_index_field hanya berfungsi pada tabel yang skemanya telah dimodifikasi menggunakan alter_external_index. Untuk perubahan massal yang melibatkan banyak kolom, gunakan alter_external_index — karena mengganti seluruh skema dalam satu operasi.
Remove columns from the mapping
Gunakan remove_external_index untuk menghapus pemetaan kolom tertentu:
hbase shell> remove_external_index 'testTable', 'f:name', 'f:age'What's next
Update the configuration set — konfigurasikan
managed_schemauntuk kolom non-dinamis dan tinjau semua akhiran bidang dinamis yang didukung