All Products
Search
Document Center

Tablestore:Buat indeks pencarian

Last Updated:Sep 21, 2026

Anda dapat menggunakan metode CreateSearchIndex untuk membuat satu atau beberapa indeks pencarian pada tabel data. Saat membuat indeks pencarian, tambahkan bidang yang ingin dikueri ke dalam indeks tersebut. Anda juga dapat mengonfigurasi opsi lanjutan, seperti bidang routing dan pre-sorting.

Prasyarat

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

  • Tabel data telah dibuat dan memenuhi kondisi berikut. Untuk informasi selengkapnya, lihat Buat tabel data.

    • Jumlah maksimum versi diatur ke 1.

    • Masa hidup data (TTL) diatur ke -1, atau operasi UpdateRow dinonaktifkan untuk tabel data tersebut.

Catatan penggunaan

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

  • Untuk mengatur TTL indeks pencarian ke nilai selain -1, nonaktifkan operasi UpdateRow untuk tabel data. TTL indeks pencarian harus kurang dari atau sama dengan TTL tabel data. Untuk informasi selengkapnya, lihat Manajemen siklus hidup.

Parameter

Untuk membuat indeks pencarian, tentukan nama tabel (tableName), nama indeks (indexName), dan skema indeks (schema). Skema mencakup skema bidang (fieldSchemas), pengaturan indeks (indexSetting), dan pengaturan pre-sorting indeks (indexSort).

Parameter

Deskripsi

tableName

Nama tabel data.

indexName

Nama indeks pencarian.

fieldSchemas

Daftar skema bidang. Setiap skema bidang berisi parameter berikut:

  • fieldName (wajib): Nama bidang yang akan diindeks. Ini adalah nama kolom. Tipe: String.

    Bidang dalam indeks pencarian dapat berupa kolom kunci primer atau kolom atribut.

  • fieldType (wajib): Tipe data bidang. Atur parameter ini ke TableStore.FieldType.XXX.

  • index (opsional): Apakah pengindeksan diaktifkan. Tipe: Boolean.

    Nilai default: true, yang membuat indeks terbalik atau indeks spasial untuk kolom tersebut. Atur ke false untuk melewati pengindeksan pada kolom tersebut.

  • analyzer (opsional): Jenis pemisah kata. Atur parameter ini ketika tipe bidang adalah Text. Jika tidak diatur, tokenisasi kata tunggal digunakan secara default.

  • analyzerParameter (opsional): Pengaturan parameter pemisah kata. Konfigurasikan parameter berdasarkan jenis pemisah kata. Diperlukan jika parameter analyzer diatur untuk suatu bidang.

  • enableSortAndAgg (opsional): Apakah pengurutan dan agregasi statistik diaktifkan. Tipe: Boolean.

    Hanya bidang dengan enableSortAndAgg diatur ke true yang mendukung pengurutan.

    Penting

    Bidang Nested tidak mendukung pengurutan dan agregasi statistik. Namun, sub-kolom dalam bidang Nested mendukung pengurutan dan agregasi statistik.

  • isAnArray (opsional): Apakah bidang tersebut merupakan array. Tipe: Boolean.

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

    Tipe Nested secara inheren merupakan array, sehingga parameter ini tidak diperlukan ketika fieldType adalah Nested.

  • fieldSchemas (opsional): Ketika tipe bidang adalah Nested, gunakan parameter ini untuk mengatur tipe indeks sub-kolom dalam dokumen bersarang. Tipenya adalah daftar skema bidang.

  • isVirtualField (opsional): Apakah bidang tersebut merupakan kolom virtual. Tipe: Boolean. Nilai default: false. Atur ke true untuk menggunakan kolom virtual.

  • sourceFieldName (opsional): Nama bidang sumber dalam tabel data. Tipe: String. Diperlukan jika isVirtualField diatur ke true.

  • dateFormats (opsional): Format tanggal. Tipe: String. Diperlukan jika tipe bidang adalah Date. Untuk informasi selengkapnya, lihat Tipe data tanggal dan waktu.

  • enableHighlighting (opsional): Apakah ringkasan dan penyorotan diaktifkan. Tipe: Boolean. Nilai default: false. Atur ke true untuk mengaktifkan fitur ini. Hanya bidang Text yang mendukung penyorotan.

    Penting

    Fitur ini didukung di Tablestore SDK untuk Node.js versi 5.5.0 dan yang lebih baru.

  • vectorOptions (opsional): Properti bidang vektor. Diperlukan untuk bidang bertipe Vector. Termasuk parameter berikut:

    • dataType: Tipe data vektor. Hanya float32 yang didukung. Untuk kebutuhan tipe data lainnya, kirim tiket.

    • dimension: Jumlah dimensi vektor. Maksimum: 4.096.

    • metricType: Algoritma pengukuran jarak untuk vektor. Algoritma yang didukung: Jarak Euclidean (euclidean), kemiripan kosinus (cosine), dan dot product (dot_product).

      • Jarak Euclidean (euclidean): Mengukur jarak garis lurus antara dua vektor dalam ruang multidimensi. Karena alasan performa, Tablestore melewatkan perhitungan akar kuadrat terakhir. Skor yang lebih besar menunjukkan kemiripan yang lebih tinggi.

      • Kemiripan kosinus (cosine): Mengukur kosinus sudut antara dua vektor. Skor yang lebih tinggi menunjukkan kemiripan yang lebih tinggi. Umumnya digunakan untuk data teks.

      • Dot product (dot_product): Mengalikan koordinat yang bersesuaian dari dua vektor berdimensi sama dan menjumlahkan hasilnya. Skor yang lebih tinggi menunjukkan kemiripan yang lebih tinggi.

      Untuk panduan memilih algoritma metrik jarak, lihat Algoritma metrik jarak.

indexSetting

Pengaturan indeks, yang mencakup pengaturan routingFields.

routingFields (opsional): Bidang routing kustom. Anda dapat memilih beberapa kolom kunci primer sebagai bidang routing. Dalam kebanyakan kasus, Anda hanya perlu mengatur satu bidang. Jika Anda mengatur beberapa kunci routing, sistem akan menggabungkan nilai-nilai kunci routing tersebut menjadi satu nilai tunggal.

Saat penulisan data indeks, sistem mendistribusikan data indeks berdasarkan nilai bidang routing. Data dengan nilai bidang routing yang sama disimpan dalam partisi data yang sama.

indexSort

Pengaturan pre-sorting indeks, yang mencakup pengaturan sorters. Jika tidak diatur, data diurutkan berdasarkan kunci primer secara default.

Catatan

Indeks yang berisi bidang Nested tidak mendukung indexSort. Tidak ada pre-sorting yang dilakukan.

sorters (wajib): Metode pre-sorting untuk indeks. Mendukung pengurutan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya, lihat Pengurutan dan paging.

  • PrimaryKeySort mengurutkan berdasarkan kunci primer. Termasuk pengaturan berikut:

    order: Urutan pengurutan. Mendukung urutan ascending atau descending. Default: ascending (TableStore.SortOrder.SORT_ORDER_ASC).

  • FieldSort mengurutkan berdasarkan nilai bidang. Termasuk pengaturan berikut:

    Pre-sorting hanya berlaku untuk bidang yang memiliki indeks serta pengurutan dan agregasi statistik yang diaktifkan.

    • fieldName: Nama bidang yang akan diurutkan.

    • order: Urutan pengurutan. Mendukung urutan ascending atau descending. Default: ascending (TableStore.SortOrder.SORT_ORDER_ASC).

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

timeToLive

Opsional. Waktu hidup (TTL) data, yaitu periode retensi data. Satuan: detik.

Nilai default: -1, yang berarti data tidak pernah kedaluwarsa. Nilai TTL minimum adalah 86.400 detik (satu hari).

Ketika periode retensi data melebihi TTL, data yang kedaluwarsa akan dibersihkan secara otomatis.

Contoh

Buat indeks pencarian dan atur pemisah kata

Contoh berikut membuat indeks pencarian dengan kolom-kolom berikut: pic_id (Keyword), count (Long), time_stamp (Long), pic_description (Text), col_vector (Vector), pos (Geo-point), pic_tag (Nested), date (Date), analyzer_single_word (Text), analyzer_split (Text), dan analyzer_fuzzy (Text). Kolom pic_tag memiliki dua sub-bidang: sub_tag_name (Keyword) dan tag_name (Keyword). Kolom analyzer_single_word menggunakan tokenisasi kata tunggal, analyzer_split menggunakan tokenisasi dengan pembatas, dan analyzer_fuzzy menggunakan tokenisasi fuzzy.

client.createSearchIndex({
    tableName: "<TABLE_NAME>", // Set the table name.
    indexName: "<INDEX_NAME>", // Set the search index name.
    schema: {
        fieldSchemas: [
            {
                fieldName: "pic_id",
                fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
                index: true, // Enable indexing.
                enableSortAndAgg: true, // Enable sorting and aggregation.
                isAnArray: false
            },
            {
                fieldName: "count",
                fieldType: TableStore.FieldType.LONG,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false
            },
            {
                fieldName: "time_stamp",
                fieldType: TableStore.FieldType.LONG,
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
            },
            {
                fieldName: "pic_description",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
            },
            {
                fieldName: "col_vector",
                fieldType: TableStore.FieldType.VECTOR,
                index: true,
                isAnArray: false,
                vectorOptions: {
                    dataType: TableStore.VectorDataType.VD_FLOAT_32,
                    dimension: 4,
                    metricType: TableStore.VectorMetricType.VM_COSINE,
                }
            },
            {
                fieldName: "pos",
                fieldType: TableStore.FieldType.GEO_POINT,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false,
            },
            {
                fieldName: "pic_tag",
                fieldType: TableStore.FieldType.NESTED,
                index: false,
                enableSortAndAgg: false,
                fieldSchemas: [
                    {
                        fieldName: "sub_tag_name",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "tag_name",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    }
                ]
            },
            {
                fieldName: "date",
                fieldType: TableStore.FieldType.DATE,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false,
                dateFormats: ["yyyy-MM-dd'T'HH:mm:ss.SSSSSS"],
            },
            {
                fieldName: "analyzer_single_word",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "single_word",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    caseSensitive: true,
                    delimitWord: false,
                }
            },
            {
                fieldName: "analyzer_split",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "split",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    delimiter: ",",
                }
            },
            {
                fieldName: "analyzer_fuzzy",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "fuzzy",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    minChars: 1,
                    maxChars: 5,
                }
            },
        ],
        indexSetting: { // The configuration options of the index.
            "routingFields": ["count", "pic_id"], // Only primary key columns can be set as routing fields.
            "routingPartitionSize": null
        },
        //indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
            //sorters: [
                // { // If you do not set indexSort, the data is sorted by primary key in ascending order by default.
                //     primaryKeySort: {
                //         order: TableStore.SortOrder.SORT_ORDER_ASC
                //     }
                // },
                //{
                //   fieldSort: {
                //        fieldName: "Col_Keyword",
                //        order: TableStore.SortOrder.SORT_ORDER_DESC // Set the sorting order for indexSort.
                //    }
                //}
            //]
        //},
        timeToLive: 1000000, // Unit: seconds.
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:',data);
});

Buat indeks pencarian dan aktifkan penyorotan

Contoh berikut membuat indeks pencarian dengan penyorotan diaktifkan. Indeks tersebut memiliki tiga bidang: k (Keyword), t (Text), dan n (Nested). Bidang n memiliki tiga sub-bidang: nk (Keyword), nl (Long), dan nt (Text). Penyorotan diaktifkan untuk bidang t dan sub-bidang nt.

client.createSearchIndex({
    tableName: "<TABLE_NAME>", // Set the table name.
    indexName: "<SEARCH_INDEX_NAME>", // Set the search index name.
    schema: {
        fieldSchemas: [
            {
                fieldName: "k",
                fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
                index: true, // Enable indexing.
                enableSortAndAgg: true, // Enable sorting and aggregation.
                isAnArray: false
            },
            {
                fieldName: "t",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                enableHighlighting: true, // Enable highlighting for the field.
                isAnArray: false,
            },
            {
                fieldName: "n",
                fieldType: TableStore.FieldType.NESTED,
                index: false,
                enableSortAndAgg: false,
                fieldSchemas: [
                    {
                        fieldName: "nk",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "nl",
                        fieldType: TableStore.FieldType.LONG,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "nt",
                        fieldType: TableStore.FieldType.TEXT,
                        index: true,
                        enableSortAndAgg: false,
                        enableHighlighting: true, // Enable highlighting for the field.
                    },
                ]
            },
        ],
        indexSetting: { // The configuration options of the index.
            "routingFields": ["id"], // Only primary key columns can be set as routing fields.
            "routingPartitionSize": null
        },
        //indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
            //sorters: [
                // { // If you do not set indexSort, the data is sorted by primary key in ascending order by default.
                //     primaryKeySort: {
                //         order: TableStore.SortOrder.SORT_ORDER_ASC
                //     }
                // },
                //{
                //   fieldSort: {
                //        fieldName: "Col_Keyword",
                //        order: TableStore.SortOrder.SORT_ORDER_DESC // Set the sorting order for indexSort.
                //    }
                //}
            //]
        //},
        timeToLive: 1000000, // Unit: seconds.
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:',data);
});

FAQ

Referensi