Gunakan Tablestore SDK untuk Go guna membuat indeks pencarian serta mengonfigurasi bidang indeks, presorting, TTL, kolom virtual, dan highlighting.
Prasyarat
Sebelum memulai, lakukan persiapan berikut:
Instal Tablestore Go SDK dan inisialisasi klien.
Tabel data telah dibuat, dan jumlah maksimum versinya diatur ke 1.
Tabel data memiliki nilai time-to-live (TTL) sebesar -1, atau pembaruan menggunakan UpdateRow dinonaktifkan.
Deskripsi
Panggil CreateSearchIndex untuk membuat indeks pencarian pada tabel data. Anda dapat membuat beberapa indeks pencarian untuk satu tabel data. Tentukan tabel data, nama indeks, dan skema indeks lengkap, lalu tambahkan kolom yang dapat dikueri ke FieldSchemas. Tipe data bidang indeks harus sesuai dengan tipe data kolom tabel yang bersesuaian. Untuk tipe yang didukung, lihat Data types.
func (client *tablestore.TableStoreClient) CreateSearchIndex(request *tablestore.CreateSearchIndexRequest) (*tablestore.CreateSearchIndexResponse, error)
Pembuatan indeks pencarian bersifat asinkron. Setelah permintaan berhasil, tunggu hingga data indeks tersinkronisasi sebelum melakukan kueri terhadap indeks tersebut.
Contoh berikut membuat indeks pencarian yang berisi bidang Keyword dan Long. Jika presorting dan TTL tidak dikonfigurasi, indeks akan diurutkan berdasarkan kunci primer dan datanya tidak kedaluwarsa.
tableName := "example_table"
indexName := "example_index"
request := &tablestore.CreateSearchIndexRequest{
TableName: tableName,
IndexName: indexName,
IndexSchema: &tablestore.IndexSchema{
FieldSchemas: []*tablestore.FieldSchema{
{
FieldName: proto.String("category"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
},
{
FieldName: proto.String("price"),
FieldType: tablestore.FieldType_LONG,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
},
},
}
_, err := client.CreateSearchIndex(request)
if err != nil {
log.Fatal(err)
}
Parameter
CreateSearchIndexRequest berisi parameter berikut.
|
Name |
Type |
Description |
|
TableName (required) |
string |
Nama tabel data. |
|
IndexName (required) |
string |
Nama indeks pencarian. |
|
IndexSchema (required) |
*tablestore.IndexSchema |
Skema indeks. |
|
SourceIndexName (optional) |
*string |
Indeks sumber yang digunakan untuk memodifikasi skema secara dinamis. Untuk informasi selengkapnya, lihat Dynamically modify a search index schema. |
|
TimeToLive (optional) |
*int32 |
TTL data indeks dalam satuan detik. Nilai default: -1. Nilai yang valid adalah -1 dan bilangan bulat int32 yang tidak kurang dari 86.400. Nilai -1 menunjukkan bahwa data tidak pernah kedaluwarsa. Untuk nilai selain -1, pembaruan menggunakan UpdateRow harus dinonaktifkan, dan TTL indeks tidak boleh melebihi TTL tabel. Untuk informasi selengkapnya, lihat Configure the TTL of a search index. |
Skema indeks
|
Name |
Type |
Description |
|
FieldSchemas (required) |
[]*tablestore.FieldSchema |
Daftar bidang indeks. |
|
IndexSetting (optional) |
*tablestore.IndexSetting |
Pengaturan indeks. |
|
IndexSort (optional) |
*search.Sort |
Konfigurasi presorting indeks. Jika parameter ini dihilangkan dan indeks tidak berisi bidang Nested, indeks akan diurutkan berdasarkan kunci primer. Presorting tidak didukung untuk indeks yang berisi bidang Nested. |
Bidang indeks
|
Name |
Type |
Description |
|
FieldName (required) |
*string |
Nama bidang indeks, yang dapat berkorespondensi dengan kolom kunci primer atau kolom atribut. |
|
FieldType (required) |
tablestore.FieldType |
Tipe data bidang indeks. |
|
Index (optional) |
*bool |
Menentukan apakah akan membuat indeks terbalik (inverted) atau spasial. Untuk bidang selain Nested dan JSON, nilai yang dihilangkan dianggap sebagai true. |
|
IndexOptions (optional) |
*tablestore.IndexOptions |
Granularitas konten indeks untuk bidang Text. Parameter ini biasanya dihilangkan. |
|
Analyzer (optional) |
*tablestore.Analyzer |
Alat analisis untuk bidang Text. Jika dihilangkan, tokenisasi kata tunggal akan digunakan. |
|
AnalyzerParameter (optional) |
interface{} |
Parameter alat analisis. Konfigurasikan parameter ini berdasarkan nilai Analyzer. |
|
EnableSortAndAgg (optional) |
*bool |
Menentukan apakah pengurutan dan agregasi diaktifkan. Fitur ini tidak didukung untuk bidang Text dan Nested, tetapi didukung untuk bidang turunan dari bidang Nested. |
|
EnableHighlighting (optional) |
*bool |
Menentukan apakah ringkasan dan highlighting diaktifkan. Hanya bidang Text yang mendukung fitur ini. Nilai default: false. |
|
Store (optional) |
*bool |
Menentukan apakah nilai asli bidang disimpan dalam indeks pencarian. Jika diaktifkan, ReturnAllFromIndex dapat mengembalikan nilai tersebut. |
|
IsArray (optional) |
*bool |
Menentukan apakah bidang tersebut merupakan array. Nilai array harus ditulis dalam format array JSON. Jangan konfigurasikan parameter ini untuk bidang Nested. |
|
FieldSchemas (optional) |
[]*tablestore.FieldSchema |
Bidang turunan dari bidang Nested atau JSON. Parameter ini wajib untuk bidang Nested dan JSON. |
|
IsVirtualField (optional) |
*bool |
Menentukan apakah bidang tersebut merupakan kolom virtual. Nilai default: false. |
|
SourceFieldNames (optional) |
[]string |
Bidang sumber yang dipetakan ke kolom virtual. Parameter ini wajib untuk kolom virtual. Hanya satu bidang sumber yang didukung. |
|
DateFormats (optional) |
[]string |
Format tanggal yang didukung oleh bidang Date. Parameter ini wajib untuk bidang Date. |
|
VectorOptions (optional) |
*tablestore.VectorOptions |
Konfigurasi vektor untuk bidang Vector. Parameter ini wajib untuk bidang Vector. |
|
JsonType (optional) |
*tablestore.JsonType |
Tipe indeks untuk bidang JSON. Nilai yang valid: JsonType_OBJECT dan JsonType_NESTED. Parameter ini wajib untuk bidang JSON. |
|
TextSimilarity (optional) |
*tablestore.TextSimilarity |
Algoritma kemiripan untuk bidang Text. Nilai yang valid: TextSimilarity_BM25 dan TextSimilarity_SHORT_TEXT. |
Konfigurasi vektor
|
Name |
Type |
Description |
|
VectorDataType (required) |
*tablestore.VectorDataType |
Tipe data vektor. Hanya VectorDataType_FLOAT_32 yang didukung. |
|
VectorMetricType (required) |
*tablestore.VectorMetricType |
Metrik jarak. Jarak Euclidean, kemiripan kosinus, dan dot product didukung. |
|
Dimension (required) |
*int32 |
Dimensi vektor. Nilai maksimum: 4096. |
Pengaturan indeks
|
Name |
Type |
Description |
|
RoutingFields (optional) |
[]string |
Bidang routing kustom. Anda dapat menentukan satu atau beberapa kolom kunci primer. Baris dengan nilai routing yang sama akan ditulis ke partisi indeks yang sama. |
Konfigurasi presorting
|
Name |
Type |
Description |
|
Sorters (required) |
[]search.Sorter |
Presorter. PrimaryKeySort dan FieldSort didukung. Bidang yang digunakan oleh FieldSort harus mengaktifkan pengurutan dan agregasi. Untuk informasi selengkapnya, lihat Sort and paginate results. |
Contoh
Konfigurasi presorting indeks
indexSort := &search.Sort{Sorters: []search.Sorter{
&search.FieldSort{
FieldName: "price",
Order: search.SortOrder_ASC.Enum(),
},
}}
request := &tablestore.CreateSearchIndexRequest{
TableName: "example_table",
IndexName: "example_index",
IndexSchema: &tablestore.IndexSchema{
FieldSchemas: []*tablestore.FieldSchema{
{
FieldName: proto.String("price"),
FieldType: tablestore.FieldType_LONG,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
},
IndexSort: indexSort,
},
}
_, err := client.CreateSearchIndex(request)
if err != nil {
log.Fatal(err)
}
Konfigurasi TTL indeks
ttl := int32(7 * 24 * 60 * 60)
request := &tablestore.CreateSearchIndexRequest{
TableName: "example_table",
IndexName: "example_index",
TimeToLive: &ttl,
IndexSchema: &tablestore.IndexSchema{
FieldSchemas: []*tablestore.FieldSchema{
{
FieldName: proto.String("category"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
},
},
},
}
_, err := client.CreateSearchIndex(request)
if err != nil {
log.Fatal(err)
}
Konfigurasi alat analisis
analyzer := tablestore.Analyzer_Split
delimiter := ","
fields := []*tablestore.FieldSchema{
{
FieldName: proto.String("tags"),
FieldType: tablestore.FieldType_TEXT,
Index: proto.Bool(true),
Analyzer: &analyzer,
AnalyzerParameter: tablestore.SplitAnalyzerParameter{
Delimiter: &delimiter,
},
},
}
Buat bidang vektor
fields := []*tablestore.FieldSchema{
{
FieldName: proto.String("embedding"),
FieldType: tablestore.FieldType_VECTOR,
Index: proto.Bool(true),
VectorOptions: &tablestore.VectorOptions{
VectorDataType: tablestore.VectorDataType_FLOAT_32.Enum(),
VectorMetricType: tablestore.VectorMetricType_COSINE.Enum(),
Dimension: proto.Int32(4),
},
},
}
Buat kolom virtual
fields := []*tablestore.FieldSchema{
{
FieldName: proto.String("price"),
FieldType: tablestore.FieldType_LONG,
Index: proto.Bool(true),
},
{
FieldName: proto.String("price_text"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
IsVirtualField: proto.Bool(true),
SourceFieldNames: []string{"price"},
},
}
Aktifkan ringkasan dan highlighting
analyzer := tablestore.Analyzer_SingleWord
fields := []*tablestore.FieldSchema{
{
FieldName: proto.String("description"),
FieldType: tablestore.FieldType_TEXT,
Index: proto.Bool(true),
Analyzer: &analyzer,
EnableHighlighting: proto.Bool(true),
},
}