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 Java para recuperar dados em um índice Lastpoint por meio de um índice de busca.
Observações de uso
O recurso de índice Lastpoint é compatível com o Tablestore SDK for Java V5.17.1 ou posterior. Para utilizar esse recurso, use o Tablestore SDK for Java V5.17.1 ou superior.
Para obter informações sobre como baixar uma nova versão do Tablestore SDK for Java, consulte Histórico de versões do Tablestore SDK for Java.
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 mostra como criar um índice de busca para um índice Lastpoint. Para detalhes sobre o cenário e os dados do exemplo, consulte Apêndice.
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 para facilitar a consulta das tags no campo _tags.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest createSearchIndexRequest = new CreateSearchIndexRequest();
createSearchIndexRequest.setTableName("");
createSearchIndexRequest.setIndexName("");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("_#h", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("_m_name", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("_data_source", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("_tags", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true).setIsArray(true),
new FieldSchema("_time", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("gps", FieldType.GEO_POINT).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("speed", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("status", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("total_mileage", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("remaining_mileage", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true)
));
createSearchIndexRequest.setIndexSchema(indexSchema);
client.createSearchIndex(createSearchIndexRequest);
}
2. Recuperar dados usando um índice de busca
O código de exemplo a seguir demonstra como usar 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.
private static void rangeQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
RangeQuery rangeQuery = new RangeQuery(); // Set the query type to RangeQuery.
rangeQuery.setFieldName("speed"); // Specify the field to match.
rangeQuery.greaterThan(ColumnValue.fromDouble(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.setGetTotalCount(true);
searchQuery.setQuery(rangeQuery);
// Specify that the rows that meet the query condition is sorted by the speed column in descending order.
FieldSort fieldSort = new FieldSort("speed");
fieldSort.setOrder(SortOrder.DESC);
searchQuery.setSort(new Sort(Arrays.asList((Sort.Sorter)fieldSort)));
searchQuery.setGetTotalCount(true); // Specify that the total number of rows that meet the query condition is returned.
SearchRequest searchRequest = new SearchRequest("", "", searchQuery);
// You can configure the columnsToGet parameter to specify the columns that you want to return or specify that all columns are returned. If you do not configure this parameter, only the primary key columns are returned.
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true); // Specify that all columns are returned.
searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
System.out.println("TotalCount: " + resp.getTotalCount()); // Print the total number of matched rows, not the number of returned rows.
System.out.println("Row: " + resp.getRows());
}
Perguntas frequentes
Referências
Os principais recursos dos índices de busca incluem consulta baseada em colunas de chave primária ou não primárias, consulta booleana, consulta geográfica, busca de texto completo, consulta difusa, consulta por prefixo, consulta aninhada, colapso (distinto), ordenação, consulta de correspondência total 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.
Neste exemplo, os campos _m_name, _data_source e _tags são identificadores de série temporal que especificam o nome da medição, a source de dados e as informações de tag da série temporal, respectivamente. O campo _time indica o momento em que os dados foram reportados. Os campos gps, speed, status, total_mileage e remaining_mileage representam os dados da série temporal e especificam as coordenadas GPS do veículo, velocidade, status, quilometragem total e quilometragem restante, respectivamente.
|
_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 |