Ikhtisar
Konfigurasi tabel indeks merupakan salah satu konfigurasi terpenting di OpenSearch Vector Search 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.
Konfigurasikan 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 tersebut.
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 Anda tidak membuat indeks bitmap, Anda tidak perlu menyetel parameter ini. Setelah Anda membuat kamus frekuensi tinggi atau kamus adaptif untuk istilah frekuensi tinggi, ruang indeks dapat dikurangi dan kinerja pengambilan dapat ditingkatkan.
adaptive_dictionaries: Kamus yang diperlukan untuk membuat indeks bitmap adaptif. Istilah frekuensi tinggi dan indeks bitmap dihasilkan berdasarkan aturan yang Anda konfigurasikan. Anda juga dapat membiarkan parameter ini kosong sesuai kebutuhan.
file_compress: Mendeklarasikan parameter dan alias untuk berbagai metode kompresi file. Metode-metode ini digunakan untuk mengompresi file untuk indeks maju, indeks terbalik, dan indeks 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: 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 Anda tidak menyetel parameter ttl_field_name, bidang bawaan ops_doc_time_to_live_in_seconds akan digunakan. Jika Anda menyetel parameter ttl_field_name, bidang tersebut harus bertipe UINT32 dan bernilai tunggal.
default_ttl: TTL default. Jika parameter enable_ttl dikonfigurasi dan parameter default_ttl tidak dikonfigurasi, gunakan nilai default std::numeric_limits<int64_t>::max() >> 20. Jika parameter default_ttl dikonfigurasi dan parameter enable_ttl tidak dikonfigurasi, sistem secara otomatis menyetel parameter enable_ttl menjadi 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 Vector Search Edition.
analyzer: Alat analisis yang digunakan untuk bidang bertipe TEXT. Alat analisis harus ditentukan untuk bidang bertipe TEXT, tetapi tidak dapat ditentukan untuk bidang bertipe lainnya. Untuk informasi tentang alat analisis bawaan yang didukung oleh OpenSearch Vector Search Edition, lihat Alat Analisis. Jika Anda ingin menentukan alat analisis berbeda untuk bidang bertipe 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 dalam 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 bertipe STRING juga dapat diperbarui. Nilai defaultnya adalah false. Anda dapat menyetel parameter updatable_multi_value untuk bidang bernilai ganda dengan 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 bertipe STRING. Jika Anda menyetel parameter updatable_multi_value menjadi true, Anda dapat menyetel parameter u32offset_threshold. Nilai default parameter u32offset_threshold adalah 0xFFFFFFFFL. Dalam kebanyakan kasus, Anda 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: Jumlah tetap dari beberapa nilai dalam bidang. Jika bidang ini dikonfigurasi, itu adalah bidang bernilai ganda panjang tetap dalam indeks atribut. Bidang dengan tipe berikut dapat dikonfigurasikan sebagai atribut bernilai ganda 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 bertipe STRING. Parameter ini tidak dapat disetel untuk bidang bernilai ganda bertipe STRING.
compress_type: Metode kompresi yang digunakan saat bidang disimpan sebagai atribut. Nilainya bisa uniq, equal, atau uniq|equal. Secara default, parameter ini dibiarkan kosong, yang menunjukkan 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 dilakukan untuk data offset.
Untuk atribut bernilai tunggal bertipe INTEGER, Anda tidak dapat menyetel parameter ini ke uniq, tetapi Anda dapat menyetelnya ke equal untuk mengaktifkan kompresi nilai sama. Anda juga dapat mengonfigurasikan kompresi nilai sama untuk atribut bernilai tunggal bertipe FLOAT atau DOUBLE floating-point.
Metode kompresi lainnya: Untuk bidang bernilai ganda panjang tetap bertipe 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 bertipe 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 panjang tetap atau bernilai tunggal dan tipe kompresi untuk bidang tersebut tidak dapat disetel ke equal.
default_null_string: Nilai literal dari nilai null. Nilai defaultnya adalah __NULL__.
Anda dapat menentukan default_time_zone dalam format +/-HHMM untuk bidang bertipe TIMESTAMP. Waktu dalam Coordinated Universal Time (UTC). Sebagai contoh, 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 bertipe TIMESTAMP diproses. Jika bidang disimpan sebagai bidang ringkasan, ia ditampilkan berdasarkan zona waktu default.
Konfigurasi Indexs
"indexs":
[
{index1},
{index2},
...
{indexn}
]Dalam konfigurasi indexs, daftar indeks dikonfigurasikan. Setiap item mewakili konfigurasi indeks lengkap. Untuk informasi lebih lanjut tentang jenis indeks dan konfigurasi yang didukung oleh OpenSearch Vector Search Edition, lihat 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 semua tipe dapat dikonfigurasikan sebagai atribut kecuali tipe TEXT.
Catatan:
Berikut ini menjelaskan nilai-nilai bidang bertipe TIME, DATE, dan TIMESTAMP yang disimpan dalam indeks maju:
DATE: Jumlah hari yang telah berlalu dari 1 Januari 1970 hingga tanggal yang ditentukan. Nilai tunggal disimpan dalam empat byte. Jika perlu, 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 yang telah berlalu dari 00:00:00 hingga waktu yang ditentukan. Nilai tunggal disimpan dalam empat byte.
TIMESTAMP: Jumlah milidetik yang telah berlalu 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: Bidang-bidang yang terkandung dalam ringkasan. Bidang 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: Semua istilah dalam kamus. Istilah-istilah tersebut dipisahkan dengan titik koma (;).
konfigurasi adaptive_dictionaries
"adaptive_dictionaries":[
{
"adaptive_dictionary_name":"df",
"dict_type":"DOC_FREQUENCY",
"threshold":1500000
},
{
"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 dengan frekuensi dokumen (df) sama dengan atau lebih besar dari ambang batas yang ditentukan digunakan sebagai istilah frekuensi tinggi.
PERCENT: Menentukan bahwa istilah dengan df atau totalDocCount dikalikan 100 sama dengan atau lebih besar dari ambang batas yang ditentukan digunakan sebagai istilah frekuensi tinggi.
INDEX_SIZE: Membandingkan ukuran indeks bitmap yang dihasilkan berdasarkan istilah dan ukuran indeks asli. Jika ukuran indeks bitmap lebih kecil, istilah tersebut digunakan sebagai istilah frekuensi tinggi.
Catatan:
Dalam kebanyakan kasus, jika istilah indeks dapat dihitung, seperti istilah a, b, dan c, dan indeks terbalik tidak sering 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. Ambang batas empiris adalah 5% dari jumlah total dokumen. Sebagai contoh, jika jumlah total dokumen adalah 10 juta, Anda dapat menyetel ambang batas menjadi 500.000 untuk DOC_FREQUENCY dan 5 untuk PERCENT.