All Products
Search
Document Center

Tablestore:Buat indeks pencarian

Last Updated:Oct 09, 2026

Anda dapat menggunakan metode CreateSearchIndex untuk membuat indeks pencarian pada tabel data. Satu tabel data dapat memiliki beberapa indeks pencarian. Saat membuat indeks pencarian, tambahkan bidang yang ingin dikueri ke dalam indeks tersebut dan konfigurasikan opsi lanjutan seperti rute kustom dan pengurutan awal.

Prasyarat

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

  • Tabel data telah dibuat dengan `max versions` diatur ke 1 dan `time to live` diatur ke -1. Untuk informasi selengkapnya, lihat Buat tabel data.

Catatan penggunaan

Tipe data bidang dalam indeks pencarian harus sesuai dengan tipe data bidang yang bersesuaian dalam tabel data.

API

/**
 * Buat indeks pencarian.
 * @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

Tentukan nama tabel (`table_name`), nama indeks pencarian (`index_name`), dan skema indeks (`schema`). Skema mencakup `field_schemas` (pengaturan bidang), `index_setting` (pengaturan indeks), dan `index_sort` (pengaturan pengurutan awal).

Parameter

Deskripsi

table_name

Nama tabel data.

index_name

Nama indeks pencarian.

field_schemas

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

  • field_name (Wajib): Nama bidang yang akan diindeks, yaitu nama kolom. Tipe data: String.

    Bidang tersebut dapat berupa kolom kunci primer atau kolom atribut.

  • field_type (Wajib): Tipe data bidang, dalam format `FieldTypeConst::XXX`.

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

    Jika diatur ke true, kolom tersebut menyimpan data array. Tulis data dalam format array JSON, seperti `["a","b","c"]`.

    Bidang bersarang secara default merupakan array. Jika `field_type` bernilai Nested, lewati parameter ini.

  • index (Opsional): Menentukan apakah pengindeksan diaktifkan untuk kolom tersebut. Tipe data: Boolean.

    Default: true, yang membangun indeks terbalik atau indeks spasial untuk kolom tersebut. Atur ke false untuk melewati pengindeksan.

  • analyzer (Opsional): Jenis tokenisasi. Hanya berlaku untuk bidang Text. Default: tokenisasi kata tunggal.

  • enable_sort_and_agg (Opsional): Menentukan apakah pengurutan dan agregasi diaktifkan. Tipe data: Boolean.

    Hanya bidang dengan enable_sort_and_agg diatur ke true yang mendukung pengurutan.

    Penting

    Bidang bertipe Nested tidak mendukung pengurutan dan agregasi. Namun, subkolom di dalam bidang Nested mendukung fitur ini.

index_setting

Pengaturan indeks, termasuk pengaturan `routing_fields`.

routing_fields (Opsional): Bidang routing kustom. Anda dapat memilih beberapa kolom kunci primer sebagai bidang routing. Dalam kebanyakan kasus, cukup atur satu bidang saja. Jika Anda mengatur beberapa kunci routing, sistem akan menggabungkan nilai-nilainya menjadi satu nilai tunggal.

Saat data indeks ditulis, sistem menghitung lokasi distribusi data indeks berdasarkan nilai bidang routing. Catatan dengan nilai bidang routing yang sama akan diindeks ke partisi data yang sama.

index_sort

Pengaturan pengurutan awal indeks, termasuk pengaturan `sorters`. Default: diurutkan berdasarkan kunci primer.

Catatan

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

sorters (Wajib): Metode pengurutan awal untuk indeks pencarian. Mendukung PrimaryKeySort dan FieldSort. Untuk informasi selengkapnya, lihat Pengurutan dan penomoran halaman.

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

    order: Urutan pengurutan, ascending atau descending. Default: ascending (`SortOrderConst::SORT_ORDER_ASC`).

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

    Hanya bidang yang diindeks dengan pengurutan dan agregasi diaktifkan yang dapat diurutkan sebelumnya.

    • field_name: Nama bidang yang digunakan untuk pengurutan.

    • order: Urutan pengurutan, ascending atau descending. Default: ascending (`SortOrderConst::SORT_ORDER_ASC`).

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

Contoh

Buat indeks pencarian dengan kolom-kolom berikut: keyword (Keyword), text (Text), geo (Geo-point), long (Long), double (Double), boolean (Boolean), array (Keyword), dan nested (Nested). Kolom nested berisi subkolom nested_keyword bertipe Keyword. Indeks diurutkan berdasarkan kunci primer dan 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 diurutkan sebelumnya.
//            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

Referensi