多元索引快速入门

更新时间:2025-04-27 03:24:21

本文介绍通过Java SDK快速使用多元索引的操作。

前提条件

  • 已初始化 Client。具体操作,请参见初始化Tablestore Client

  • 已创建数据表,并且数据表的最大版本数(max Versions)必须为1,数据生命周期(Time to Live)必须满足如下条件中的任意一个。具体操作,请参见创建数据表

    • 数据表的数据生命周期为 -1(数据永不过期)。

    • 数据表的数据生命周期不为 -1 时,数据表为禁止更新状态(即是否允许更新)。

  • 已了解多元索引支持的字段类型,以及多元索引字段类型与数据表字段类型的映射关系。更多信息,请参见数据类型

使用流程

步骤一:创建多元索引

创建多元索引用于加速数据查询。创建多元索引时,您需要将要查询的字段添加到多元索引中,您还可以按需配置多元索引的数据生命周期、预排序等高级选项。

以下示例用于为数据表创建一个多元索引,多元索引包含Col_KeywordCol_Long两列,类型分别设置为字符串(Keyword)和整型(Long)。多元索引按照数据表主键进行预排序且数据永不过期。

说明

多元索引支持的数据类型以及多元索引与数据表的数据类型映射请参见多元索引数据类型

private static void createSearchIndex(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    //设置数据表名称。
    request.setTableName("sampletable"); 
    //设置多元索引名称。
    request.setIndexName("samplesearchindex"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            //设置字段名和类型。
            new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
            new FieldSchema("Col_Long", FieldType.LONG)));
    request.setIndexSchema(indexSchema);
    //调用client创建多元索引。
    client.createSearchIndex(request); 
}

步骤二:使用多元索引查询数据

使用多元索引查询数据时,请根据实际查询场景选择合适的查询类型。查询数据时支持配置要返回的列以及返回数据的排序方式。

以下示例用于查询表中Col_Keyword列精确匹配"hangzhou"的数据。

/**
 * 查询表中Col_Keyword列精确匹配"hangzhou"的数据。
 * @param client
 */
private static void termQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    TermQuery termQuery = new TermQuery(); //设置查询类型为TermQuery。
    termQuery.setFieldName("Col_Keyword"); //设置要匹配的字段。
    termQuery.setTerm(ColumnValue.fromString("hangzhou")); //设置要匹配的值。
    searchQuery.setQuery(termQuery);
    //searchQuery.setGetTotalCount(true); //设置返回匹配的总行数。

    SearchRequest searchRequest = new SearchRequest("sampletable", "samplesearchindex", searchQuery);
    //通过设置columnsToGet参数可以指定返回的列或返回所有列,如果不设置此参数,则默认只返回主键列。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); //设置为返回所有列。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); //设置为返回指定列。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); //打印匹配到的总行数,非返回行数。
    System.out.println("Row: " + resp.getRows());
}

相关文档

  • 本页导读
  • 前提条件
  • 使用流程
  • 步骤一:创建多元索引
  • 步骤二:使用多元索引查询数据
  • 相关文档