Todos os produtos
Search
Central de documentação

Tablestore:Recuperar um índice Lastpoint

Última atualização: Jun 30, 2026

Os índices de busca aceleram a recuperação de índices Lastpoint e oferecem recursos de consulta multidimensional e análise estatística. Este tópico descreve como usar o Tablestore SDK for Go para recuperar dados em um índice Lastpoint por meio de um índice de busca.

Notas de uso

O recurso de índice Lastpoint é compatível com o Tablestore SDK for Go V1.7.15 ou posterior. Para utilizar esse recurso, use o Tablestore SDK for Go V1.7.15 ou superior.

Pré-requisitos

Crie um índice Lastpoint para uma tabela de séries temporais. Para mais informações, consulte Criar um índice Lastpoint.

Procedimento

1. Criar um índice de busca

O código de exemplo a seguir demonstra como criar um índice de busca para um índice Lastpoint. Para detalhes sobre o cenário e os dados do exemplo, consulte Apêndice.

Nota

No exemplo, o valor do campo _tags é um array de strings composto por tags. Recomendamos definir o tipo do campo mapeado no índice de busca como um array de Keyword, pois isso facilita a consulta das tags no campo _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("Failed to create searchIndex with error:", err)
		return
	}
}

2. Recuperar dados usando um índice de busca

O código de exemplo a seguir demonstra como utilizar o recurso de consulta por intervalo dos índices de busca.

Neste exemplo, um índice de busca recupera as linhas em que o valor do campo speed é maior que 20,0 em um índice 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{} // Set the query type to RangeQuery.
	rangeQuery.FieldName = "speed" // Specify the field to match.
	rangeQuery.GT(20.0)                // Specify the query condition for the field. Only rows in which the value of the field is greater than 20.0 meet the query condition.
	searchQuery.SetQuery(rangeQuery)
	// Specify that the rows that meet the query condition is sorted by the speed column in descending order.
	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) // Check whether all rows that meet the query conditions are returned.
	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))
	}
}

Perguntas frequentes

Referências

Os principais recursos dos índices de busca incluem consulta baseada em colunas de chave primária ou colunas não primárias, consulta booleana, consulta geográfica, busca de texto completo, consulta difusa, consulta por prefixo, consulta aninhada, collapse (distinct), ordenação, consulta match all e agregação. Para mais informações, consulte Recursos.

Apêndice

No cenário de Internet dos Veículos (IoV), sensores enviam dados de séries temporais dos veículos para a nuvem. Os usuários podem armazenar, consultar e analisar esses dados para atender a requisitos de negócios, como relatórios de status do veículo, localização veicular, gestão de tráfego e espelhamento de tela da trajetória do veículo.

A tabela a seguir apresenta os dados de exemplo em uma tabela de séries temporais.

Nota

Neste exemplo, os campos _m_name, _data_source e _tags são identificadores de série temporal que especificam, respectivamente, o nome da medição, a fonte de dados e as informações de tag da série temporal. O campo _time indica o momento em que os dados foram reportados. Já os campos gps, speed, status, total_mileage e remaining_mileage representam os dados da série temporal, indicando, respectivamente, as coordenadas GPS do veículo, velocidade, status, quilometragem total e quilometragem restante.

_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"]

1730422800000000

30.245853,120.178564

0

Idle

20000

450

Platform A

sensor1

["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"]

1730423400000000

30.245853,120.178564

0

Idle

20000

450

Platform A

sensor2

["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"]

1730779200000000

30.245278,120.150269

50

Active

15000

300

Platform A

sensor2

["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"]

1730779800000000

30.245853,120.213654

80

Active

15050

250

Platform B

sensor3

["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"]

1730862000000000

30.246013,120.124470

60

Active

18200

300

Platform B

sensor3

["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"]

1730862600000000

30.246022,120.124460

0

Idle

18230

270

O Tablestore sincroniza automaticamente os dados do ponto temporal mais recente das séries temporais da tabela para o índice Lastpoint. A tabela a seguir exibe os dados de exemplo no índice 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"]

1730423400000000

30.245853,120.178564

0

Idle

20000

450

25#Platform A#ae

Platform A

sensor2

["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"]

1730779800000000

30.245853,120.213654

80

Active

15050

250

b2#Platform B#4b

Platform B

sensor3

["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"]

1730862600000000

30.246022,120.124460

0

Idle

18230

270