全部产品
Search
文档中心

Tablestore:Buat indeks pencarian

更新时间:Nov 30, 2025

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 dan konfigurasikan opsi lanjutan seperti bidang routing dan pengurutan awal.

Prasyarat

  • Inisialisasi klien Tablestore. Untuk informasi selengkapnya, lihat Initialize a Tablestore client.

  • Buat tabel data yang memenuhi kondisi berikut. Untuk informasi selengkapnya, lihat Create a data table.

    • max versions harus bernilai 1.

    • time to live (TTL) harus bernilai -1 atau operasi pembaruan pada tabel data harus dinonaktifkan.

Catatan penggunaan

  • Saat membuat indeks pencarian, tipe data bidang di indeks pencarian harus sesuai dengan tipe data bidang di tabel data.

  • Untuk mengatur TTL indeks pencarian ke nilai selain -1, Anda harus menonaktifkan operasi UpdateRow pada tabel data. TTL indeks pencarian harus kurang dari atau sama dengan TTL tabel data. Untuk informasi selengkapnya, lihat Lifecycle management.

Parameter

Saat membuat indeks pencarian, Anda harus menentukan nama tabel (tableName), nama indeks (indexName), dan skema indeks (schema). Skema mencakup skema bidang (fieldSchemas), pengaturan indeks (indexSetting), serta pengaturan pengurutan awal indeks (indexSort). Tabel berikut menjelaskan parameter-parameter tersebut.

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, yaitu 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): Menentukan apakah pengindeksan diaktifkan. Tipe: Boolean.

    Nilai default adalah true. Nilai ini menunjukkan bahwa indeks terbalik atau indeks spasial dibuat untuk kolom tersebut. Jika Anda mengatur parameter ini ke false, tidak ada indeks yang dibuat untuk kolom tersebut.

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

  • analyzerParameter (opsional): Pengaturan parameter pemisah kata. Atur parameter berdasarkan jenis pemisah kata. Anda harus mengatur parameter ini jika mengatur parameter analyzer untuk suatu bidang.

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

    Anda hanya dapat mengurutkan bidang yang memiliki enableSortAndAgg bernilai true.

    Penting

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

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

    Jika Anda mengatur parameter ini ke true, kolom tersebut merupakan array. Saat menulis data, formatnya harus berupa array JSON, misalnya ["a","b","c"].

    Karena tipe Nested merupakan array, Anda tidak perlu mengatur parameter ini saat fieldType bernilai Nested.

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

  • isVirtualField (opsional): Menentukan apakah bidang tersebut merupakan kolom virtual. Tipe: Boolean. Nilai default adalah false. Untuk menggunakan kolom virtual, atur parameter ini ke true.

  • sourceFieldName (opsional): Nama bidang dalam tabel data. Tipe: String. Anda harus mengatur parameter ini jika isVirtualField diatur ke true.

  • dateFormats (opsional): Format tanggal. Tipe: String. Anda harus mengatur parameter ini jika tipe bidang adalah Date. Untuk informasi selengkapnya, lihat Date and time data types.

  • enableHighlighting (opsional): Menentukan apakah ringkasan dan penyorotan diaktifkan. Tipe: Boolean. Nilai default adalah false, yang menonaktifkan ringkasan dan penyorotan. Untuk menggunakan fitur ini, atur parameter ke true. Hanya bidang Text yang mendukung fitur ini.

    Penting

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

  • vectorOptions: Parameter ini opsional dan menentukan properti bidang Vector. Jika Anda mengatur parameter fieldType ke Vector, Anda harus mengonfigurasi parameter ini. Anda dapat menggunakan parameter berikut untuk menentukan properti bidang Vector:

    • dataType: tipe data vektor. Hanya float32 yang didukung. Jika ingin menggunakan tipe data Vector lainnya, submit a ticket.

    • dimension: jumlah dimensi vektor. Jumlah maksimum dimensi untuk bidang Vector adalah 4.096.

    • metricType: algoritma yang digunakan untuk mengukur jarak antar vektor. Nilai yang valid: euclidean, cosine, dan dot_product.

      • euclidean: algoritma Jarak Euclidean yang mengukur jalur terpendek antara dua vektor dalam ruang multidimensi. Untuk performa yang lebih baik, algoritma Jarak Euclidean di Tablestore tidak melakukan perhitungan akar kuadrat akhir. Nilai yang lebih besar yang diperoleh menggunakan algoritma Jarak Euclidean menunjukkan tingkat kemiripan yang lebih tinggi antara dua vektor.

      • cosine: algoritma kemiripan cosinus yang menghitung cosinus sudut antara dua vektor dalam ruang vektor. Nilai yang lebih besar yang diperoleh menggunakan algoritma kemiripan cosinus menunjukkan tingkat kemiripan yang lebih tinggi antara dua vektor. Dalam kebanyakan kasus, algoritma ini digunakan untuk menghitung kemiripan antara data teks.

      • dot_product: algoritma hasil kali titik yang mengalikan koordinat yang bersesuaian dari dua vektor dengan dimensi yang sama dan menjumlahkan hasil perkaliannya. Nilai yang lebih besar yang diperoleh menggunakan algoritma hasil kali titik menunjukkan tingkat kemiripan yang lebih tinggi antara dua vektor.

      Untuk informasi selengkapnya, lihat Appendix: distance measurement algorithms for vectors.

indexSetting

Pengaturan indeks, yang mencakup pengaturan routingFields.

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

indexSort

Pengaturan pengurutan awal indeks, yang mencakup pengaturan sorters. Jika Anda tidak mengatur parameter ini, data akan diurutkan berdasarkan kunci primer secara default.

Catatan

indexSort tidak didukung untuk indeks yang berisi bidang Nested. Tidak ada pengurutan awal yang dilakukan.

sorters (wajib): Metode pengurutan awal untuk indeks. Anda dapat mengurutkan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya tentang pengurutan, lihat Sorting and paging.

  • PrimaryKeySort mengurutkan berdasarkan kunci primer. Pengaturan berikut termasuk di dalamnya:

    order: Urutan pengurutan. Anda dapat mengurutkan secara ascending atau descending. Default-nya adalah ascending (TableStore.SortOrder.SORT_ORDER_ASC).

  • FieldSort mengurutkan berdasarkan nilai bidang. Pengaturan berikut termasuk di dalamnya:

    Anda hanya dapat melakukan pengurutan awal pada bidang yang telah diindeks serta memiliki pengurutan dan agregasi statistik yang diaktifkan.

    • fieldName: Nama bidang yang digunakan untuk pengurutan.

    • order: Urutan pengurutan. Anda dapat mengurutkan secara ascending atau descending. Default-nya adalah ascending (TableStore.SortOrder.SORT_ORDER_ASC).

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

timeToLive

Contoh

Buat indeks pencarian dan atur pemisah kata

Contoh berikut menunjukkan cara membuat indeks pencarian yang mencakup 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, kolom analyzer_split menggunakan tokenisasi dengan pembatas, sedangkan kolom 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 menunjukkan cara mengaktifkan penyorotan saat membuat indeks pencarian. Indeks tersebut mencakup tiga bidang: k (Keyword), t (Text), dan n (Nested). Bidang n memiliki tiga sub-bidang: nk (Keyword), nl (Long), dan nt (Text). Fitur 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