Gunakan Tablestore SDK for Python untuk membuat indeks pencarian serta mengonfigurasi bidang indeks, presorting, time to live (TTL), kolom virtual, dan highlighting.
Prasyarat
Instal Tablestore SDK for Python dan inisialisasi klien.
tabel dengan jumlah maksimum versi diatur ke 1
TTL tabel diatur ke -1 atau pembaruan melalui
UpdateRowdinonaktifkan untuk tabel tersebut
Deskripsi
Panggil create_search_index untuk membuat indeks pencarian pada suatu tabel. Satu tabel dapat memiliki beberapa indeks pencarian. Tentukan nama tabel, nama indeks, dan konfigurasi lengkap indeks dalam permintaan, lalu tambahkan kolom yang akan dikueri ke fields. Tipe bidang indeks harus sesuai dengan tipe data kolom tabel yang bersesuaian. Untuk daftar tipe yang didukung, lihat Data types.
create_search_index(table_name, index_name, index_meta)
Pembuatan indeks pencarian bersifat asinkron. Setelah permintaan berhasil, tunggu hingga sinkronisasi data indeks selesai sebelum melakukan kueri terhadap indeks tersebut.
Contoh berikut membuat example_index pada example_table dengan bidang Keyword dan Long. Jika presorting dan TTL tidak dikonfigurasi, data diindeks akan diurutkan berdasarkan primary key dan data indeks tidak akan kedaluwarsa.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Parameter
create_search_index menyediakan parameter berikut.
|
Name |
Type |
Description |
|
table_name (required) |
|
Nama tabel. |
|
index_name (required) |
|
Nama indeks pencarian. |
|
index_meta (required) |
|
Konfigurasi indeks pencarian. |
Konfigurasi indeks
index_meta bertipe SearchIndexMeta dan menyediakan parameter berikut.
|
Name |
Type |
Description |
|
fields (required) |
|
Bidang indeks. |
|
index_setting (optional) |
|
Pengaturan indeks. |
|
index_sort (optional) |
|
Konfigurasi presorting. Jika parameter ini tidak dikonfigurasi dan indeks tidak mengandung bidang Nested, data diurutkan berdasarkan primary key. Indeks Nested tidak mendukung presorting. |
|
time_to_live (optional) |
|
TTL data indeks, dalam detik. Nilai default: -1. Nilainya harus -1 atau bilangan bulat yang lebih besar dari atau sama dengan 86400. Nilai -1 menunjukkan bahwa data indeks tidak kedaluwarsa. Jika Anda menentukan nilai lain, nonaktifkan pembaruan melalui |
Bidang indeks
Setiap elemen dalam index_meta.fields[] bertipe FieldSchema dan menyediakan parameter berikut.
|
Name |
Type |
Description |
|
field_name (required) |
|
Nama bidang indeks. Bidang ini dapat berkorespondensi dengan kolom kunci primer atau kolom atribut. |
|
field_type (required) |
|
Tipe bidang indeks. Gunakan Nested untuk hubungan logis multilayer, JSON untuk data berformat JSON, dan Geo-point untuk koordinat geografis. |
|
index (optional) |
|
Menentukan apakah akan membuat indeks terbalik (inverted) atau indeks spasial untuk bidang tersebut. Nilai default: |
|
enable_highlighting (optional) |
|
Menentukan apakah akan mengaktifkan summary and highlighting. Hanya bidang Text yang mendukung fitur ini. Nilai default: |
|
analyzer (optional) |
|
analyzer untuk bidang Text. Jika parameter ini tidak dikonfigurasi, tokenisasi kata tunggal digunakan. |
|
analyzer_parameter (optional) |
|
Parameter analyzer. Jika |
|
enable_sort_and_agg (optional) |
|
Menentukan apakah akan mengaktifkan sorting dan agregasi. Nilai default: |
|
is_array (optional) |
|
Menentukan apakah bidang tersebut merupakan array. Nilai default: |
|
sub_field_schemas (optional) |
|
Bidang turunan dari bidang Nested atau JSON. Parameter ini wajib untuk bidang Nested dan JSON. |
|
is_virtual_field (optional) |
|
Menentukan apakah bidang tersebut merupakan kolom virtual. Nilai default: |
|
source_fields (optional) |
|
Bidang tabel sumber yang dipetakan ke kolom virtual. Parameter ini wajib untuk kolom virtual. Hanya satu bidang sumber yang didukung. |
|
date_formats (optional) |
|
Format tanggal yang didukung oleh bidang Date. Parameter ini wajib untuk bidang Date. |
|
vector_options (optional) |
|
Tipe data vektor, dimensi, dan metrik jarak untuk bidang Vector. Parameter ini wajib untuk bidang Vector. |
|
json_type (optional) |
|
Tipe indeks JSON. Nilai yang valid: |
|
text_similarity (optional) |
|
Algoritma kemiripan untuk bidang Text. Nilai yang valid: |
Konfigurasi vektor
index_meta.fields[].vector_options bertipe VectorOptions dan menyediakan parameter berikut.
|
Name |
Type |
Description |
|
data_type (required) |
|
Tipe data vektor. Hanya |
|
dimension (required) |
|
Dimensi vektor. Nilai maksimum: 4096. |
|
metric_type (required) |
|
Metrik jarak. Nilai yang valid: |
Pengaturan indeks
index_meta.index_setting bertipe IndexSetting dan menyediakan parameter berikut.
|
Name |
Type |
Description |
|
routing_fields (optional) |
|
Bidang routing kustom. Anda dapat menentukan satu atau beberapa kolom kunci primer. Dalam kebanyakan kasus, tentukan satu kolom. Jika Anda menentukan beberapa kolom, nilainya akan digabungkan. Data dengan nilai bidang routing yang sama akan ditulis ke partisi data yang sama. |
Konfigurasi presorting
index_meta.index_sort bertipe Sort dan menyediakan parameter berikut.
|
Name |
Type |
Description |
|
sorters (required) |
|
Aturan presorting. |
Pengurutan berdasarkan primary key
Elemen bertipe PrimaryKeySort dalam index_meta.index_sort.sorters[] mengurutkan data berdasarkan primary key dan menyediakan parameter berikut.
|
Name |
Type |
Description |
|
sort_order (optional) |
|
Urutan pengurutan. Nilai yang valid: |
Pengurutan berdasarkan nilai bidang
Elemen bertipe FieldSort dalam index_meta.index_sort.sorters[] mengurutkan data berdasarkan nilai bidang dan menyediakan parameter berikut.
|
Name |
Type |
Description |
|
field_name (required) |
|
Nama bidang. |
|
sort_order (optional) |
|
Urutan pengurutan. Nilai yang valid: |
|
sort_mode (optional) |
|
Nilai yang digunakan untuk pengurutan ketika suatu bidang berisi beberapa nilai. |
Contoh
Konfigurasi presorting
Contoh berikut mengurutkan data indeks berdasarkan bidang created_at secara ascending.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"created_at",
FieldType.LONG,
index=True,
enable_sort_and_agg=True,
),
]
index_sort = Sort([FieldSort("created_at", SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_sort=index_sort)
client.create_search_index(table_name, index_name, index_meta)
Konfigurasi TTL indeks
Contoh berikut mengatur TTL indeks menjadi 7 hari.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
]
index_meta = SearchIndexMeta(fields, time_to_live=7 * 24 * 60 * 60)
client.create_search_index(table_name, index_name, index_meta)
Konfigurasi tokenisasi
Contoh berikut mengonfigurasi tokenisasi split untuk bidang Text description dan menggunakan koma (,) sebagai pembatas.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"description",
FieldType.TEXT,
index=True,
analyzer=AnalyzerType.SPLIT,
analyzer_parameter=SplitAnalyzerParameter(","),
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Buat bidang vektor
Contoh berikut membuat bidang Vector empat dimensi bernama embedding dan menggunakan dot product untuk mengukur kemiripan vektor.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"embedding",
FieldType.VECTOR,
index=True,
vector_options=VectorOptions(
data_type=VectorDataType.VD_FLOAT_32,
dimension=4,
metric_type=VectorMetricType.VM_DOT_PRODUCT,
),
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Buat kolom virtual
Contoh berikut memetakan bidang Keyword category ke kolom virtual bertipe Long dan bidang Long price ke kolom virtual bertipe Keyword.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"category_as_long",
FieldType.LONG,
index=True,
is_virtual_field=True,
source_fields=["category"],
),
FieldSchema("price", FieldType.LONG, index=True),
FieldSchema(
"price_as_keyword",
FieldType.KEYWORD,
index=True,
is_virtual_field=True,
source_fields=["price"],
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Aktifkan highlighting
Contoh berikut mengaktifkan highlighting untuk bidang Text description.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
FieldSchema(
"description",
FieldType.TEXT,
index=True,
enable_highlighting=True,
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)