All Products
Search
Document Center

Tablestore:Buat indeks pencarian

Last Updated:Aug 07, 2026

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 UpdateRow dinonaktifkan 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)
Catatan

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)

str

Nama tabel.

index_name (required)

str

Nama indeks pencarian.

index_meta (required)

SearchIndexMeta

Konfigurasi indeks pencarian.

Konfigurasi indeks

index_meta bertipe SearchIndexMeta dan menyediakan parameter berikut.

Name

Type

Description

fields (required)

List[FieldSchema]

Bidang indeks.

index_setting (optional)

IndexSetting

Pengaturan indeks.

index_sort (optional)

Sort

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)

int

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 UpdateRow untuk tabel tersebut. TTL indeks tidak boleh melebihi TTL tabel. Anda dapat mengubah nilai ini dengan update_search_index setelah indeks dibuat. Untuk informasi selengkapnya, lihat Lifecycle management.

Bidang indeks

Setiap elemen dalam index_meta.fields[] bertipe FieldSchema dan menyediakan parameter berikut.

Name

Type

Description

field_name (required)

str

Nama bidang indeks. Bidang ini dapat berkorespondensi dengan kolom kunci primer atau kolom atribut.

field_type (required)

FieldType

Tipe bidang indeks. Gunakan Nested untuk hubungan logis multilayer, JSON untuk data berformat JSON, dan Geo-point untuk koordinat geografis.

index (optional)

bool

Menentukan apakah akan membuat indeks terbalik (inverted) atau indeks spasial untuk bidang tersebut. Nilai default: False. Atur parameter ini ke True untuk mengkueri bidang tersebut.

enable_highlighting (optional)

bool

Menentukan apakah akan mengaktifkan summary and highlighting. Hanya bidang Text yang mendukung fitur ini. Nilai default: False. Parameter ini memerlukan Tablestore SDK for Python versi 6.0.0 atau lebih baru. Kami menyarankan Anda menggunakan versi terbaru.

analyzer (optional)

str

analyzer untuk bidang Text. Jika parameter ini tidak dikonfigurasi, tokenisasi kata tunggal digunakan.

analyzer_parameter (optional)

AnalyzerParameter

Parameter analyzer. Jika analyzer dikonfigurasi, tentukan parameter untuk analyzer yang dipilih.

enable_sort_and_agg (optional)

bool

Menentukan apakah akan mengaktifkan sorting dan agregasi. Nilai default: False. Bidang Text dan Nested tidak mendukung sorting atau agregasi, tetapi bidang turunan dari bidang Nested mendukungnya.

is_array (optional)

bool

Menentukan apakah bidang tersebut merupakan array. Nilai default: False. Nilai array harus ditulis sebagai array JSON. Anda tidak perlu mengonfigurasi parameter ini untuk bidang Nested.

sub_field_schemas (optional)

List[FieldSchema]

Bidang turunan dari bidang Nested atau JSON. Parameter ini wajib untuk bidang Nested dan JSON.

is_virtual_field (optional)

bool

Menentukan apakah bidang tersebut merupakan kolom virtual. Nilai default: False.

source_fields (optional)

List[str]

Bidang tabel sumber yang dipetakan ke kolom virtual. Parameter ini wajib untuk kolom virtual. Hanya satu bidang sumber yang didukung.

date_formats (optional)

List[str]

Format tanggal yang didukung oleh bidang Date. Parameter ini wajib untuk bidang Date.

vector_options (optional)

VectorOptions

Tipe data vektor, dimensi, dan metrik jarak untuk bidang Vector. Parameter ini wajib untuk bidang Vector.

json_type (optional)

JsonType

Tipe indeks JSON. Nilai yang valid: JsonType.OBJECT_JSON dan JsonType.NESTED_JSON. Parameter ini wajib untuk bidang JSON.

text_similarity (optional)

TextSimilarity

Algoritma kemiripan untuk bidang Text. Nilai yang valid: TextSimilarity.BM25 dan TextSimilarity.SHORT_TEXT.

Konfigurasi vektor

index_meta.fields[].vector_options bertipe VectorOptions dan menyediakan parameter berikut.

Name

Type

Description

data_type (required)

VectorDataType

Tipe data vektor. Hanya VectorDataType.VD_FLOAT_32 yang didukung.

dimension (required)

int

Dimensi vektor. Nilai maksimum: 4096.

metric_type (required)

VectorMetricType

Metrik jarak. Nilai yang valid: VectorMetricType.VM_EUCLIDEAN, VectorMetricType.VM_COSINE, dan VectorMetricType.VM_DOT_PRODUCT. Untuk informasi selengkapnya, lihat Vector search.

Pengaturan indeks

index_meta.index_setting bertipe IndexSetting dan menyediakan parameter berikut.

Name

Type

Description

routing_fields (optional)

List[str]

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)

List[Sorter]

Aturan presorting. PrimaryKeySort mengurutkan berdasarkan primary key, dan FieldSort mengurutkan berdasarkan nilai bidang. Bidang yang digunakan oleh FieldSort harus memiliki sorting dan agregasi yang diaktifkan. Untuk informasi selengkapnya, lihat Sorting and paging.

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)

SortOrder

Urutan pengurutan. Nilai yang valid: SortOrder.ASC dan SortOrder.DESC. Nilai default: SortOrder.ASC.

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)

str

Nama bidang.

sort_order (optional)

SortOrder

Urutan pengurutan. Nilai yang valid: SortOrder.ASC dan SortOrder.DESC. Nilai default: SortOrder.ASC.

sort_mode (optional)

SortMode

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)