Indeks pencarian mempercepat pengambilan indeks Lastpoint serta menyediakan kemampuan kueri multi-dimensi dan analisis statistik. Topik ini menjelaskan cara menggunakan Tablestore SDK for Go untuk mengambil data dalam indeks Lastpoint melalui indeks pencarian.
Catatan Penggunaan
Fitur indeks Lastpoint didukung oleh Tablestore SDK for Go V1.7.15 atau lebih baru. Untuk menggunakan fitur ini, gunakan Tablestore SDK for Go versi tersebut atau yang lebih baru.
Prasyarat
Indeks Lastpoint telah dibuat untuk tabel seri waktu. Untuk informasi lebih lanjut, lihat Buat indeks Lastpoint.
Prosedur
1. Buat indeks pencarian
Kode sampel berikut memberikan contoh cara membuat indeks pencarian untuk indeks Lastpoint. Untuk informasi tentang skenario sampel dan data, lihat Lampiran.
Dalam contoh ini, nilai dari bidang _tags adalah array string yang terdiri dari tag. Kami sarankan Anda menetapkan tipe bidang yang dipetakan di indeks pencarian sebagai array Kata Kunci, yang memudahkan untuk menanyakan tag dalam bidang _tags.
func createSearchIndex(client *tablestore.TableStoreClient) {
request := &tablestore.CreateSearchIndexRequest{}
request.TableName = "<LASTPOINT_INDEX_NAME>"
request.IndexName = "<SEARCH_INDEX_NAME>"
request.IndexSchema = &tablestore.IndexSchema{
FieldSchemas: []*tablestore.FieldSchema{
{
FieldName: proto.String("_#h"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("_m_name"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("_data_source"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("_tags"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
IsArray: proto.Bool(true),
},
{
FieldName: proto.String("_time"),
FieldType: tablestore.FieldType_LONG,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("gps"),
FieldType: tablestore.FieldType_GEO_POINT,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("speed"),
FieldType: tablestore.FieldType_DOUBLE,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("status"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("total_mileage"),
FieldType: tablestore.FieldType_LONG,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
{
FieldName: proto.String("remaining_mileage"),
FieldType: tablestore.FieldType_LONG,
Index: proto.Bool(true),
EnableSortAndAgg: proto.Bool(true),
},
},
}
_, err := client.CreateSearchIndex(request)
if err != nil {
fmt.Println("Gagal membuat searchIndex dengan kesalahan:", err)
return
}
}2. Ambil data menggunakan indeks pencarian
Kode sampel berikut memberikan contoh cara menggunakan fitur kueri rentang indeks pencarian.
Dalam contoh ini, indeks pencarian digunakan untuk mengambil baris di mana nilai bidang speed lebih besar dari 20,0 dalam indeks Lastpoint.
func RangeQuery(client *tablestore.TableStoreClient, lastpointName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(lastpointName)
searchRequest.SetIndexName(indexName)
searchQuery := search.NewSearchQuery()
rangeQuery := &search.RangeQuery{} // Tetapkan jenis kueri ke RangeQuery.
rangeQuery.FieldName = "speed" // Tentukan bidang yang sesuai.
rangeQuery.GT(20.0) // Tentukan kondisi kueri untuk bidang tersebut. Hanya baris di mana nilai bidang lebih besar dari 20.0 yang memenuhi kondisi kueri.
searchQuery.SetQuery(rangeQuery)
// Tentukan bahwa baris yang memenuhi kondisi kueri diurutkan berdasarkan kolom speed secara menurun.
searchQuery.SetSort(&search.Sort{
[]search.Sorter{
&search.FieldSort{
FieldName: "speed",
Order: search.SortOrder_DESC.Enum(),
},
},
})
searchRequest.SetSearchQuery(searchQuery)
searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAll: true,
})
searchResponse, err := client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Periksa apakah semua baris yang memenuhi kondisi kueri dikembalikan.
fmt.Println("RowCount: ", len(searchResponse.Rows))
for _, row := range searchResponse.Rows {
jsonBody, err := json.Marshal(row)
if err != nil {
panic(err)
}
fmt.Println("Row: ", string(jsonBody))
}
}FAQ
Referensi
Fitur inti yang disediakan oleh indeks pencarian mencakup kueri berdasarkan kolom kunci utama atau non-kunci utama, kueri Boolean, kueri geo, pencarian teks lengkap, kueri kabur, kueri awalan, kueri bersarang, runtuh (distinct), pengurutan, kueri cocok semua, dan agregasi. Untuk informasi lebih lanjut, lihat Fitur.
Lampiran
Dalam skenario Internet of Vehicles (IoV), sensor melaporkan data seri waktu kendaraan ke cloud. Pengguna dapat menyimpan, menanyakan, dan menganalisis data seri waktu untuk memenuhi persyaratan bisnis seperti laporan status kendaraan, penempatan kendaraan, manajemen lalu lintas, dan pencerminan layar jalur kendaraan.
Tabel berikut menunjukkan data sampel dalam tabel seri waktu.
Dalam contoh ini, bidang _m_name, _data_source, dan _tags adalah pengenal seri waktu, yang menentukan nama pengukuran, sumber data, dan informasi tag dari seri waktu, masing-masing. Bidang _time menentukan waktu ketika data dilaporkan. Bidang gps, speed, status, total_mileage, dan remaining_mileage adalah data seri waktu dalam seri waktu, yang menentukan koordinat GPS kendaraan, kecepatan kendaraan, status kendaraan, total jarak tempuh kendaraan, dan jarak tempuh kendaraan tersisa, masing-masing.
_m_name | _data_source | _tags | _time | gps | speed | status | total_mileage | remaining_mileage |
Platform A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] | 1.730.422.800.000.000 | 30.245853,120.178564 | 0 | Idle | 20.000 | 450 |
Platform A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] | 1.730.423.400.000.000 | 30.245853,120.178564 | 0 | Idle | 20.000 | 450 |
Platform A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] | 1.730.779.200.000.000 | 30.245278,120.150269 | 50 | Active | 15.000 | 300 |
Platform A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] | 1.730.779.800.000.000 | 30.245853,120.213654 | 80 | Active | 15.050 | 250 |
Platform B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] | 1.730.862.000.000.000 | 30.246013,120.124470 | 60 | Active | 18.200 | 300 |
Platform B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] | 1.730.862.600.000.000 | 30.246022,120.124460 | 0 | Idle | 18.230 | 270 |
Tablestore secara otomatis menyinkronkan data titik terbaru dalam seri waktu di tabel seri waktu ke indeks Lastpoint. Tabel berikut menunjukkan data sampel dalam indeks Lastpoint.
_#h | _m_name | _data_source | _tags | _time | gps | speed | status | total_mileage | remaining_mileage |
4c#Platform A#07 | Platform A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] | 1.730.423.400.000.000 | 30.245853,120.178564 | 0 | Idle | 20.000 | 450 |
25#Platform A#ae | Platform A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] | 1.730.779.800.000.000 | 30.245853,120.213654 | 80 | Active | 15.050 | 250 |
b2#Platform B#4b | Platform B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] | 1.730.862.600.000.000 | 30.246022,120.124460 | 0 | Idle | 18.230 | 270 |