檢索Lastpoint索引
多元索引可以加速Lastpoint索引的數(shù)據(jù)檢索,并提供多維查詢和統(tǒng)計分析功能。本文介紹在Java SDK中如何通過多元索引來檢索Lastpoint索引數(shù)據(jù)。
注意事項
表格存儲Java SDK從5.17.1版本開始支持Lastpoint索引功能。使用該功能時,請將SDK版本升級到5.17.1及以上版本。
如果您需要下載新版本的Java SDK,請參見Java SDK歷史迭代版本。
前提條件
已在時序表上創(chuàng)建Lastpoint索引。具體操作,請參見創(chuàng)建Lastpoint索引。
使用流程
1. 創(chuàng)建多元索引
以下示例用于為Lastpoint索引創(chuàng)建一個多元索引。示例場景及數(shù)據(jù)請參見附錄。
示例中_tags
列為標(biāo)簽構(gòu)成的字符串?dāng)?shù)組,建議將對應(yīng)的多元索引字段類型設(shè)置為Keyword數(shù)組,以便更加方便地對_tags
內(nèi)的標(biāo)簽進行查詢。
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest createSearchIndexRequest = new CreateSearchIndexRequest();
createSearchIndexRequest.setTableName("<LASTPOINT_INDEX_NAME>");
createSearchIndexRequest.setIndexName("<SEARCH_INDEX_NAME>");
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. 通過多元索引檢索數(shù)據(jù)
此處以范圍查詢?yōu)槔榻B多元索引查詢功能的使用。
以下示例用于通過多元索引檢索Lastpoint索引中speed值大于20.0的行數(shù)據(jù)。
private static void rangeQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
RangeQuery rangeQuery = new RangeQuery(); //設(shè)置查詢類型為RangeQuery。
rangeQuery.setFieldName("speed"); //設(shè)置要匹配的字段。
rangeQuery.greaterThan(ColumnValue.fromDouble(20.0)); //設(shè)置該字段的范圍條件為大于20.0。
searchQuery.setGetTotalCount(true);
searchQuery.setQuery(rangeQuery);
//設(shè)置按照speed列逆序排序。
FieldSort fieldSort = new FieldSort("speed");
fieldSort.setOrder(SortOrder.DESC);
searchQuery.setSort(new Sort(Arrays.asList((Sort.Sorter)fieldSort)));
searchQuery.setGetTotalCount(true); //設(shè)置返回匹配的總行數(shù)。
SearchRequest searchRequest = new SearchRequest("<LASTPOINT_INDEX_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
//通過設(shè)置columnsToGet參數(shù)可以指定返回的列或返回所有列,如果不設(shè)置此參數(shù),則默認只返回主鍵列。
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true); //設(shè)置為返回所有列。
searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
System.out.println("TotalCount: " + resp.getTotalCount()); //打印匹配到的總行數(shù),非返回行數(shù)。
System.out.println("Row: " + resp.getRows());
}
常見問題
相關(guān)文檔
多元索引的核心功能包括任意列的查詢(包括主鍵列和非主鍵列)、多字段自由組合查詢、地理位置查詢、全文檢索、模糊查詢、前綴查詢、嵌套查詢、去重、排序、查詢數(shù)據(jù)總行數(shù)和統(tǒng)計聚合等。更多信息,請參見多元索引功能。
附錄
在車聯(lián)網(wǎng)場景中,車輛通過傳感器上報時序數(shù)據(jù)到云端。通過存儲、查詢和分析這些時序數(shù)據(jù),用戶可以實現(xiàn)車況報告、車輛定位、交通管理和軌跡投屏等業(yè)務(wù)需求。
假設(shè)時序表的數(shù)據(jù)示例如下:
其中_m_name
、_data_source
和_tags
為時間線標(biāo)識,分別代表度量名稱、數(shù)據(jù)源和時間線的標(biāo)簽信息,_time
為數(shù)據(jù)上報時間。gps
、speed
、status
、total_mileage
和remaining_mileage
為時間線的時序數(shù)據(jù),分別代表車輛GPS坐標(biāo)、車輛速度、車輛狀態(tài)、車輛總里程和車輛剩余里程。
_m_name | _data_source | _tags | _time | gps | speed | status | total_mileage | remaining_mileage |
平臺A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=浙AD7512*","color=white"] | 1730422800000000 | 30.245853,120.178564 | 0 | 閑置 | 20000 | 450 |
平臺A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=浙AD7512*","color=white"] | 1730423400000000 | 30.245853,120.178564 | 0 | 閑置 | 20000 | 450 |
平臺A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=浙C72B2*","color=black"] | 1730779200000000 | 30.245278,120.150269 | 50 | 使用中 | 15000 | 300 |
平臺A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=浙C72B2*","color=black"] | 1730779800000000 | 30.245853,120.213654 | 80 | 使用中 | 15050 | 250 |
平臺B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=浙B121*9","color=blue"] | 1730862000000000 | 30.246013,120.124470 | 60 | 使用中 | 18200 | 300 |
平臺B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=浙B121*9","color=blue"] | 1730862600000000 | 30.246022,120.124460 | 0 | 閑置 | 18230 | 270 |
表格存儲會自動同步時序表中時間線的最新時間點數(shù)據(jù)到Lastpoint索引表,Lastpoint索引中的數(shù)據(jù)示例如下:
_#h | _m_name | _data_source | _tags | _time | gps | speed | status | total_mileage | remaining_mileage |
4c#平臺A#07 | 平臺A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=浙AD7512*","color=white"] | 1730423400000000 | 30.245853,120.178564 | 0 | 閑置 | 20000 | 450 |
25#平臺A#ae | 平臺A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=浙C72B2*","color=black"] | 1730779800000000 | 30.245853,120.213654 | 80 | 使用中 | 15050 | 250 |
b2#平臺B#4b | 平臺B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=浙B121*9","color=blue"] | 1730862600000000 | 30.246022,120.124460 | 0 | 閑置 | 18230 | 270 |