全部产品
Search
文档中心

Tablestore:Ambil indeks Lastpoint

更新时间:Jul 06, 2025

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.

Catatan

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.

Catatan

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