All Products
Search
Document Center

ApsaraDB for HBase:Manage HBase full-text indexes

Last Updated:Mar 29, 2026

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

ParameterDescription
sourceNamespaceNamespace tabel HBase. Biarkan kosong atau atur ke default jika tabel tidak memiliki namespace.
sourceTableNama tabel HBase, tanpa namespace.
targetIndexNameNama indeks Search.
indexTypeNilai tetap: SOLR.
rowkeyFormatterTypeCara rowkey di-encode sebagai ID dokumen indeks. Nilai yang valid: STRING, HEX. Lihat Choose a rowkeyFormatterType.
fieldsArray 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).

ValueWhen to useEncodingDecoding
STRINGRowkey ditulis menggunakan Bytes.toBytes(String) — misalnya, row1, order0001, atau string "12345"Bytes.toString(byte[])Bytes.toBytes(String)
HEXRowkey 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.HexHex.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.

Peringatan

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.

ParameterDescription
sourceKolom HBase yang akan dipetakan, dalam format family:qualifier. Misalnya, f:name.
targetFieldNama bidang tujuan dalam indeks Search. Kolom dinamis — yaitu yang memiliki akhiran penanda tipe — secara otomatis dikenali tanpa memerlukan skema yang telah ditentukan sebelumnya.
typeTipe 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:

SuffixType
_sSTRING
_iINT

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'}
Catatan

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_schema untuk kolom non-dinamis dan tinjau semua akhiran bidang dinamis yang didukung