全部产品
Search
文档中心

Tablestore:Buat search index

更新时间:Nov 30, 2025

Anda dapat menggunakan metode CreateSearchIndex untuk membuat search index pada tabel data. Satu tabel data dapat memiliki beberapa search index. Saat membuat search index, tambahkan bidang yang ingin dikueri ke dalam indeks tersebut dan konfigurasikan opsi lanjutan seperti custom route dan presorting.

Prasyarat

  • Client Tablestore telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize a Tablestore client.

  • Tabel data telah dibuat dengan nilai `max versions` sebesar 1 dan nilai `time to live` sebesar -1. Untuk informasi selengkapnya, lihat Create a data table.

Catatan penggunaan

Saat membuat indeks pencarian, Tipe data bidang dalam indeks pencarian harus sesuai dengan tipe data bidang yang bersangkutan di tabel data.

API

/**
 * Buat search index.
 * @api
 *
 * @param [] $request
 *            Parameter permintaan, seperti nama tabel dan konfigurasi indeks.
 * @return [] Respons.
 * @throws OTSClientException Dilempar jika pemeriksaan parameter gagal atau server mengembalikan error verifikasi.
 * @throws OTSServerException Dilempar jika server Tablestore mengembalikan error.
 * @example "src/examples/CreateSearchIndex.php"
 */
public function createSearchIndex(array $request)

Parameter

Saat membuat search index, Anda harus menentukan nama tabel (`table_name`), nama search index (`index_name`), dan skema indeks (`schema`). Skema mencakup `field_schemas` (pengaturan semua bidang indeks), `index_setting` (pengaturan indeks), dan `index_sort` (pengaturan presorting indeks). Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

table_name

Nama tabel data.

index_name

Nama indeks pencarian.

field_schemas

Daftar skema bidang. Setiap `field_schema` berisi parameter berikut:

  • field_name (Wajib): Nama bidang yang akan diindeks. Ini adalah nama kolom. Tipe datanya adalah String.

    Bidang dalam search index dapat berupa Kolom kunci primer atau Kolom atribut.

  • field_type: wajib. Data type bidang, ditentukan dalam format `FieldTypeConst::XXX`.

  • is_array (Opsional): Menentukan apakah kolom tersebut merupakan array. Tipe datanya adalah Boolean.

    Jika diatur ke true, kolom tersebut merupakan array. Data yang ditulis ke kolom harus dalam format array JSON, misalnya `["a","b","c"]`.

    Tipe Nested merupakan array. Jika `field_type` bernilai Nested, Anda tidak perlu mengatur parameter ini.

  • index (Opsional): Menentukan apakah akan membuat indeks untuk kolom tersebut. Tipe datanya adalah Boolean.

    Nilai default-nya adalah true. Artinya, indeks terbalik atau indeks spasial dibuat untuk kolom tersebut. Jika diatur ke false, tidak ada indeks yang dibuat untuk kolom tersebut.

  • analyzer (Opsional): Jenis Tokenization. Jika tipe bidang adalah Text, Anda dapat mengatur parameter ini. Selain itu, jenis tokenizer default-nya adalah single-word tokenization.

  • enable_sort_and_agg (Opsional): Menentukan apakah sorting dan agregasi statistik diaktifkan. Tipe datanya adalah Boolean.

    Anda hanya dapat melakukan sorting pada bidang jika enable_sort_and_agg diatur ke true.

    Penting

    Bidang bertipe Nested tidak mendukung sorting dan agregasi statistik. Namun, sub-kolom di dalam bidang bertipe Nested mendukung fitur ini.

index_setting

Pengaturan indeks, yang mencakup pengaturan `routing_fields`.

routing_fields (Opsional): Custom routing fields. Anda dapat memilih beberapa Kolom kunci primer sebagai routing fields. Dalam kebanyakan kasus, Anda hanya perlu mengatur satu. Jika Anda mengatur beberapa routing keys, sistem akan menggabungkan nilai-nilainya menjadi satu nilai tunggal.

index_sort

Pengaturan presorting indeks, yang mencakup pengaturan `sorters`. Jika tidak diatur, data secara default diurutkan berdasarkan kunci primer.

Catatan

Indeks yang berisi bidang bertipe Nested tidak mendukung `index_sort` dan tidak dipresort.

sorters: wajib. Parameter ini menentukan metode presorting untuk search index. PrimaryKeySort dan FieldSort didukung. Untuk informasi selengkapnya, lihat Sorting and paging.

  • PrimaryKeySort: Mengurutkan data berdasarkan kunci primer. Termasuk pengaturan berikut:

    order: Urutan pengurutan. Data dapat diurutkan secara ascending atau descending. Default-nya adalah ascending (`SortOrderConst::SORT_ORDER_ASC`).

  • FieldSort: Mengurutkan data berdasarkan nilai bidang. Termasuk pengaturan berikut:

    Hanya bidang yang diindeks dan memiliki sorting serta agregasi statistik yang diaktifkan yang dapat dipresort.

    • field_name: Nama bidang yang digunakan untuk pengurutan.

    • order: Urutan pengurutan. Data dapat diurutkan secara ascending atau descending. Default-nya adalah ascending (`SortOrderConst::SORT_ORDER_ASC`).

    • mode: Metode pengurutan yang digunakan ketika suatu bidang memiliki beberapa nilai.

Contoh

Kode contoh berikut menunjukkan cara membuat search index. Dalam contoh ini, search index terdiri dari kolom-kolom berikut: kolom keyword bertipe Keyword, kolom text bertipe Text, kolom geo bertipe Geo-point, kolom long bertipe Long, kolom double bertipe Double, kolom boolean bertipe Boolean, kolom array bertipe Keyword, dan kolom nested bertipe Nested. Kolom nested berisi subkolom nested_keyword bertipe Keyword. Data dalam search index dipresort berdasarkan kunci primer tabel data dan dikonfigurasi agar tidak pernah kedaluwarsa.

$request = array(
    'table_name' => 'php_sdk_test',
    'index_name' => 'php_sdk_test_search_index',
    'schema' => array(
        'field_schemas' => array(
            array(
                'field_name' => 'keyword',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'text',
                'field_type' => FieldTypeConst::TEXT,
                'analyzer' => 'single_word',
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => false
            ),
            array(
                'field_name' => 'geo',
                'field_type' => FieldTypeConst::GEO_POINT,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'long',
                'field_type' => FieldTypeConst::LONG,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'double',
                'field_type' => FieldTypeConst::DOUBLE,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'boolean',
                'field_type' => FieldTypeConst::BOOLEAN,
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => false
            ),
            array(
                'field_name' => 'array',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => true
            ),
            array(
                'field_name' => 'nested',
                'field_type' => FieldTypeConst::NESTED,
                'index' => false,
                'enable_sort_and_agg' => false,
                'field_schemas' => array(
                    array(
                        'field_name' => 'nested_keyword',
                        'field_type' => FieldTypeConst::KEYWORD,
                        'index' => false,
                        'enable_sort_and_agg' => false,
                        'is_array' => false
                    )
                )
            ),
        ),
        'index_setting' => array(
            'routing_fields' => array("pk1")
        ),
//        "index_sort" => array(// Indeks yang berisi bidang bertipe Nested tidak mendukung index_sort dan tidak dipresort.
//            array(
//                'field_sort' => array(
//                    'field_name' => 'keyword',
//                    'order' => SortOrderConst::SORT_ORDER_ASC,
//                    'mode' => SortModeConst::SORT_MODE_AVG,
//                )
//            ),
//            array(
//                'pk_sort' => array(
//                    'order' => SortOrderConst::SORT_ORDER_ASC
//                )
//            ),
//        )
    )
);
$response = $otsClient->createSearchIndex($request);

FAQ

Dokumen terkait