Ikhtisar
Konfigurasi tabel indeks merupakan salah satu konfigurasi terpenting di OpenSearch Retrieval Engine Edition. Saat mengonfigurasi tabel indeks, Anda dapat menentukan format data dokumen asli dan cara membuat indeks berdasarkan data dalam dokumen tersebut. Indeks mencakup indeks terbalik, indeks maju, dan indeks ringkasan.
Konfigurasi tabel indeks
Ikhtisar Konfigurasi
{
"table_name":"sample",
"fields":[
],
"indexs":[
],
"attributes":[
],
"summarys":{
},
"dictionaries":[
],
"adaptive_dictionaries":[
],
"enable_ttl":true,
"ttl_field_name":"ttl_filed",
"default_ttl":86400
}table_name: Nama tabel indeks. Parameter ini digunakan untuk mengidentifikasi tabel indeks. Sistem akan menghasilkan file konfigurasi bernama $table_name_schema.json untuk tabel indeks.
fields: Bidang tempat indeks dibuat.
indexs: Konfigurasi indeks terbalik.
attributes: Konfigurasi indeks maju.
summarys: Konfigurasi indeks ringkasan.
dictionaries: Kamus yang diperlukan untuk membuat indeks bitmap. Jika tidak membuat indeks bitmap, parameter ini tidak perlu disetel. Setelah membuat kamus frekuensi tinggi atau kamus adaptif untuk istilah frekuensi tinggi, ruang indeks dapat dikurangi dan kinerja pengambilan dapat ditingkatkan.
adaptive_dictionaries: Membuat indeks bitmap adaptif. Istilah frekuensi tinggi dan indeks bitmap dihasilkan berdasarkan aturan yang dikonfigurasikan. Parameter ini juga dapat dibiarkan kosong jika diperlukan.
file_compress: Mendeklarasikan parameter dan alias untuk berbagai metode kompresi file. Metode ini digunakan untuk mengompres file untuk indeks maju, terbalik, dan ringkasan.
enable_ttl: Menentukan apakah fitur time to live (TTL) digunakan. Data yang kedaluwarsa akan dibersihkan secara otomatis. Nilai defaultnya adalah false.
ttl_field_name: Menentukan nama bidang tempat TTL diaktifkan dalam tabel. Jika bidang ini dibiarkan kosong dalam dokumen asli, nilai default dari parameter ttl_field_name akan digunakan. Jika pengguna tidak menyetel parameter ttl_field_name, bidang bawaan ops_doc_time_to_live_in_seconds akan digunakan. Jika pengguna menyetel parameter ttl_field_name, bidang tersebut harus bertipe UINT32 dan bernilai tunggal.
default_ttl: Menentukan TTL default. Jika parameter enable_ttl disetel dan parameter default_ttl tidak disetel, nilai default std::numeric_limits<int64_t>::max() >> 20 akan digunakan untuk parameter default_ttl. Jika parameter default_ttl disetel dan parameter enable_ttl tidak disetel, sistem akan secara otomatis menyetel parameter enable_ttl ke true.
Konfigurasi Fields
"fileds":[
{
"field_name":"title",
"field_type":"TEXT",
"analyzer":"chn_standard"
},
{
"field_name":"dup_title",
"field_type":"TEXT",
"analyzer":"fuzzy"
"user_defined_param" : {
"copy_from" : "title"
}
},
{
"field_name":"category",
"field_type":"INTEGER",
"multi_value":true,
"compress_type":"uniq|equal"
},
{
"field_name":"mlr_features",
"field_type":"INTEGER",
"multi_value":true,
"updatable_multi_value":true
},
{
"field_name":"feature",
"field_type":"float",
"multi_value":true,
"fixed_multi_value_count":32,
"compress_type":"uniq|fp16",
"updatable_multi_value":true
},
{
"field_name":"user_id",
"field_type":"INTEGER"
},
{
"field_name":"price",
"field_type":"INTEGER",
"enable_null":true,
"default_null_string":"default_null"
},
{
"field_name":"product_id",
"field_type":"LONG"
},
{
"field_name":"product_type",
"field_type":"UINT8",
"compress_type":"equal"
},
{
"field_name":"bitwords",
"field_type":"STRING",
"multi_value":true
},
{
"field_name":"date",
"field_type":"DATE"
},
{
"field_name":"time",
"field_type":"TIME"
},
{
"field_name":"timestamp",
"field_type":"TIMESTAMP",
"default_time_zone":"+0800"
}
]field_name: Nama bidang.
field_type: Tipe bidang. Untuk informasi lebih lanjut, lihat Tipe Bidang Bawaan di OpenSearch Retrieval Engine Edition.
analyzer: Analisis yang digunakan untuk bidang tipe TEXT. Analisis harus ditentukan untuk bidang tipe TEXT. Analisis tidak dapat ditentukan untuk bidang tipe lainnya. Untuk informasi tentang analisis bawaan yang didukung oleh OpenSearch Retrieval Engine Edition, lihat Analisis. Jika ingin menentukan analisis berbeda untuk bidang tipe TEXT, perluas bidang baru. Anda dapat menambahkan bidang dalam skema dan menyetel parameter user_defined_param. Untuk informasi lebih lanjut, lihat konfigurasi bidang dup_title pada blok kode sebelumnya.
multi_value: Menentukan bahwa bidang tersebut bernilai ganda. Jika Anda menentukan bidang sebagai atribut, atribut bernilai ganda ditentukan. Nilai defaultnya adalah false.
updatable_multi_value: Menentukan bahwa bidang bernilai ganda dapat diperbarui. Bidang bernilai tunggal tipe STRING juga dapat diperbarui. Nilai defaultnya adalah false. Anda dapat menyetel parameter updatable_multi_value untuk bidang bernilai ganda dari tipe berikut: INT8, UINT8, INT16, UINT16, INTEGER (integer 32-bit), UINT32, LONG (integer 64-bit), UINT64, FLOAT, DOUBLE, dan STRING. Selain bidang bernilai ganda tersebut, Anda juga dapat menyetel parameter ini untuk bidang bernilai tunggal tipe STRING. Jika Anda menyetel parameter updatable_multi_value ke true, Anda dapat menyetel parameter u32offset_threshold. Nilai default dari parameter u32offset_threshold adalah 0xFFFFFFFFL. Dalam banyak kasus, pengguna dapat mengabaikan parameter ini. Jika offset maksimum melebihi nilai parameter u32offset_threshold, format file adalah offset 8-byte. Jika tidak, format file adalah offset 4-byte.
fixed_multi_value_count: Menentukan jumlah tetap dari beberapa nilai dalam bidang. Jika bidang ini dikonfigurasikan, bidang tersebut adalah bidang bernilai ganda dengan panjang tetap dalam indeks atribut. Bidang dari tipe berikut dapat dikonfigurasikan sebagai atribut bernilai ganda dengan panjang tetap: INT8, INT16, INT32, INT64, UINT8, UINT16, UINT32, UINT64, FLOAT, dan DOUBLE. Anda dapat menyetel parameter fixed_multi_value_count untuk menentukan panjang tetap untuk bidang bernilai tunggal tipe STRING. Parameter ini tidak dapat disetel untuk bidang bernilai ganda tipe STRING.
compress_type: Menentukan metode kompresi yang digunakan saat bidang disimpan sebagai atribut. Nilainya bisa uniq, equal, atau uniq|equal. Nilai defaultnya adalah string kosong dan menentukan bahwa file tidak dikompresi.
Jika Anda menyetel parameter ini ke uniq untuk atribut bernilai ganda atau atribut string, data disimpan setelah dikompresi dengan menghapus duplikat. Jika Anda menyetel parameter ini ke equal, kompresi nilai sama diimplementasikan untuk data offset.
Untuk atribut bernilai tunggal tipe INTEGER, Anda tidak dapat menyetel parameter ini ke uniq, tetapi Anda dapat menyetel parameter ini ke equal untuk mengaktifkan kompresi nilai sama. Anda juga dapat mengonfigurasikan kompresi nilai sama untuk atribut bernilai tunggal tipe FLOAT/DOUBLE floating-point.
Metode kompresi lainnya: Untuk bidang bernilai ganda dengan panjang tetap tipe FLOAT, selain uniq dan equal, Anda juga dapat memilih salah satu metode kompresi berikut yang mengorbankan presisi demi kompresi dan penyimpanan: fp16, block_fp, dan int8#[absMax]. Untuk bidang bernilai tunggal tipe FLOAT, Anda juga dapat memilih fp16 atau int8#[absMax] untuk kompresi.
Tingkat kompresi mendekati 50% untuk fp16 dan block_fp. Ruang pengkodean fp16 sedikit lebih kecil daripada ruang pengkodean block_fp, tetapi kehilangan presisi fp16 lebih besar daripada kehilangan presisi block_fp.
int8#[absMax]: Anda harus menentukan nilai absolut maksimum untuk nilai yang dikodekan. Misalnya, jika int8#[absMax] disetel ke int8#1.5, rentang nilai yang dikodekan adalah [-1.5, 1.5]. Nilai setelah kompresi adalah 25% dari nilai awal. Kehilangan presisi terkait dengan nilai absMax. absMax yang lebih besar menyebabkan kehilangan presisi yang lebih besar.
enable_null: Menentukan apakah nilai null diizinkan untuk bidang ini. Jika enable_null adalah true, bidang yang sesuai dengan indeks tidak dapat bernilai ganda dengan panjang tetap atau bernilai tunggal dan tipe kompresi untuk bidang tersebut tidak dapat disetel ke equal.
default_null_string: Menentukan nilai literal dari nilai null. Nilai defaultnya adalah "__NULL__".
Anda dapat menentukan default_time_zone dalam format +/-HHMM untuk bidang tipe TIMESTAMP. Waktu dalam Coordinated Universal Time (UTC). Misalnya, nilai +0800 sesuai dengan UTC+8. Setelah zona waktu default dikonfigurasikan, nilai bidang tanpa informasi zona waktu dikonversi menjadi timestamp dalam UTC berdasarkan zona waktu default yang ditentukan ketika bidang tipe TIMESTAMP diuraikan. Jika bidang disimpan sebagai bidang ringkasan, bidang tersebut ditampilkan berdasarkan zona waktu default.
Konfigurasi Indexs
"indexs":
[
{index1},
{index2},
…
{indexn}
]Dalam konfigurasi indexs, daftar indeks dikonfigurasikan. Setiap item dalam daftar mewakili konfigurasi indeks lengkap. Untuk informasi lebih lanjut tentang jenis indeks dan konfigurasi yang didukung oleh OpenSearch Retrieval Engine Edition, lihat Ikhtisar Indeks Terbalik.
Konfigurasi Attributes
"attributes": [
"user_id",
"product_id",
"category"
]Dalam konfigurasi attributes, daftar bidang dikonfigurasikan. Bidang-bidang ini harus dideklarasikan dalam konfigurasi fields. Bidang dari semua tipe dapat dikonfigurasikan sebagai atribut kecuali tipe TEXT.
Catatan:
Berikut ini menjelaskan nilai-nilai bidang tipe TIME, DATE, dan TIMESTAMP yang disimpan dalam indeks maju:
DATE: Jumlah hari dari 1 Januari 1970 hingga tanggal yang ditentukan. Nilai tunggal disimpan dalam empat byte. Jika diperlukan, Anda dapat mengalikan nilai yang dikembalikan dengan 86.400.000 (jumlah total milidetik dalam satu hari) untuk mengonversi nilai yang dikembalikan menjadi timestamp.
TIME: Jumlah milidetik dari 00:00:00 hingga waktu yang ditentukan. Nilai tunggal disimpan dalam empat byte.
TIMESTAMP: Jumlah milidetik dari 1 Januari 1970 hingga timestamp yang ditentukan. Nilai tunggal disimpan dalam delapan byte.
Konfigurasi Summarys
"summarys":
{
"summary_fields":["id", "company_id", "subject", "cat_id"],
"compress":false
}summary_fields: Menentukan bidang yang terkandung dalam ringkasan. Bidang dari semua tipe dapat terkandung dalam ringkasan. Bidang-bidang tersebut harus dideklarasikan dalam konfigurasi fields.
compress: Menentukan apakah ringkasan dikompresi menggunakan zlib. Nilai true menentukan bahwa ringkasan dikompresi. Nilai false menentukan bahwa ringkasan tidak dikompresi. Nilai defaultnya adalah false.
Konfigurasi Dictionaries
"dictionaries":[
{
"dictionary_name":"bitmap1",
"content":"a;an"
},
{
"dictionary_name":"bitmap2",
"content":"of;and"
}
]dictionary_name: Nama kamus.
content: Mencantumkan semua istilah dalam kamus. Istilah dipisahkan dengan titik koma (;).
Konfigurasi Adaptive_Dictionaries
"adaptive_dictionaries":[
{
"adaptive_dictionary_name":"df",
"dict_type":"DOC_FREQUENCY",
"threshold":1.500.000
},
{
"adaptive_dictionary_name":"percent",
"dict_type":"PERCENT",
"threshold":30
},
{
"adaptive_dictionary_name":"size",
"dict_type":"INDEX_SIZE"
}
]adaptive_dictionary_name: Nama aturan untuk menghasilkan kamus frekuensi tinggi adaptif.
dict_type: Tipe aturan untuk menghasilkan istilah frekuensi tinggi adaptif. Tiga tipe berikut didukung:
DOC_FREQUENCY: Menentukan bahwa istilah frekuensi tinggi adalah istilah yang frekuensi dokumennya (df) sama dengan atau lebih besar dari ambang batas yang ditentukan.
PERCENT: Menentukan bahwa istilah frekuensi tinggi adalah istilah yang df atau totalDocCount dikalikan 100 sama dengan atau lebih besar dari ambang batas yang ditentukan.
INDEX_SIZE: Membandingkan ukuran indeks bitmap yang dihasilkan berdasarkan istilah dan ukuran indeks asli. Jika ukuran indeks bitmap kecil, istilah tersebut adalah istilah frekuensi tinggi.
Catatan:
Dalam banyak kasus, jika istilah indeks dapat dihitung, seperti istilah a, b, dan c, dan indeks terbalik jarang di-query dalam query, kami sarankan Anda menyetel parameter dict_type ke INDEX_SIZE. Jika istilah tidak dapat dihitung dan indeks terbalik sering di-query, kami sarankan Anda menyetel parameter dict_type ke PERCENT atau DOC_FREQUENCY. Kami sarankan Anda menentukan ambang batas berdasarkan hasil pengujian kinerja. Kami sarankan Anda menyetel ambang batas ke 5% dari jumlah total dokumen. Jika jumlah total dokumen adalah 10 juta, kami sarankan Anda menyetel ambang batas ke 500.000 untuk DOC_FREQUENCY dan ke 5 untuk PERCENT.