使用 Java SDK 为 Lastpoint 索引创建多元索引,并按数据字段条件检索每条时间线的最新数据。
前提条件
安装Tablestore Java SDK并初始化客户端。Lastpoint 索引需要使用 5.17.1 及以上版本,建议使用最新版本。
功能说明
直接读取 Lastpoint 索引时,需要按主键范围定位数据。如果需要按数据字段自由组合查询、全文检索、地理位置或聚合条件筛选最新数据,可以先为 Lastpoint 索引创建多元索引,再调用 search 方法检索。多元索引的查询能力参见多元索引。
public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request) throws TableStoreException, ClientException
public SearchResponse search(SearchRequest request) throws TableStoreException, ClientException
创建多元索引
仅多元索引 Schema 中配置的字段支持检索。Lastpoint 索引的 _tags 字段是字符串数组,需要映射为 Keyword 数组;其他数据字段按实际类型映射。
以下示例为 example_lastpoint_index 创建 example_search_index,并索引标签、速度和状态字段。
List<FieldSchema> fieldSchemas = Arrays.asList(
new FieldSchema("_tags", FieldType.KEYWORD)
.setIndex(true).setIsArray(true),
new FieldSchema("speed", FieldType.DOUBLE)
.setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("status", FieldType.KEYWORD)
.setIndex(true).setEnableSortAndAgg(true));
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(fieldSchemas);
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName("example_lastpoint_index");
request.setIndexName("example_search_index");
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
检索最新数据
创建多元索引是异步操作。多元索引状态变为 RUNNING 且数据同步阶段变为 INCR 后,再执行查询。
以下示例使用范围查询检索 speed 大于 20.0 的 Lastpoint 数据,并返回匹配总行数和全部列。
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("speed");
rangeQuery.greaterThan(ColumnValue.fromDouble(20.0));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(rangeQuery);
searchQuery.setGetTotalCount(true);
SearchRequest request = new SearchRequest(
"example_lastpoint_index",
"example_search_index",
searchQuery);
SearchRequest.ColumnsToGet columnsToGet =
new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
response.getRows().forEach(System.out::println);
参数说明
创建多元索引请求
CreateSearchIndexRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
tableName(必选) |
|
Lastpoint 索引名称。创建多元索引时,将 Lastpoint 索引作为数据表使用。 |
|
indexName(必选) |
|
多元索引名称。 |
|
indexSchema(必选) |
|
多元索引 Schema,包括索引字段、索引设置和预排序配置。 |
索引字段
indexSchema.fieldSchemas[] 中每个元素的类型为 FieldSchema。以下参数用于配置示例中的索引字段。
|
名称 |
类型 |
说明 |
|
fieldName(必选) |
|
Lastpoint 索引中的字段名称。 |
|
fieldType(必选) |
|
多元索引字段类型,必须与 Lastpoint 索引中的字段值类型匹配。 |
|
index(可选) |
|
是否为字段建立倒排索引或空间索引,默认值为 |
|
isArray(可选) |
|
字段是否为数组,默认值为 |
|
enableSortAndAgg(可选) |
|
是否支持排序和统计聚合,默认值为 |
检索请求
SearchRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
tableName(必选) |
|
Lastpoint 索引名称。 |
|
indexName(必选) |
|
Lastpoint 索引上的多元索引名称。 |
|
searchQuery(必选) |
|
查询条件。示例将 |
|
columnsToGet(可选) |
|
要返回的列。不设置时仅返回主键列;示例通过 |
返回值
SearchResponse 包含以下业务返回字段。
|
字段 |
类型 |
说明 |
|
|
|
通过 |
|
|
|
通过 |
|
|
|
通过 |
|
|
|
通过 |