CreateSearchIndex操作可以为某张表创建一个多元索引(SearchIndex),一张表上可以创建多个多元索引,在创建多元索引时可以指定索引名和索引结构。以下是CreateSearchIndex接口的参数:

  • TableName:要创建的多元索引所属的表名。
  • IndexName:要创建的多元索引的名字。
  • IndexSchema:定义索引结构和一些配置。
    • IndexSetting:RoutingFields(高级功能,可选配置):自定义路由字段。可以选择部分主键列作为路由字段,在进行索引数据写入时,会根据路由字段的值计算索引数据的分布位置,路由字段的值相同的记录会被索引到相同的数据分区中。
    • FieldSchemas:FieldSchema的列表,每个FieldSchema包含以下内容:
      • FieldName(必选):String。要索引的字段名,即列名。可以是主键列,也可以是属性列。
      • FieldType(必选):字段类型,详见多元索引的接口说明文档。
      • Index(可选):bool值。是否开启索引。
      • IndexOptions(可选):索引的配置选项。
      • Analyzer(可选):分词器设置。
      • EnableSortAndAgg(可选):bool值。是否开启排序与统计功能。
      • Store(可选):bool值。是否在多元索引中附加存储该字段的值。开启后,可以直接从多元索引中读取该字段的值,而不必反查主表,可用于查询性能优化。
      • Array(可选):bool值。是否是数组格式。如果为true,则表示该列是一个数组,在写入时,也必须按照json数组格式写入,比如["a","b","c"]。NESTED类型本身就是一个数组,所以无须设置Array。
    • IndexSort(可选):索引的预排序方式,可以指定主键排序或者列排序。如果不设置,默认按照主键进行预排序。

示例代码:


/// <summary>
/// 创建一个多元索引,包含Keyword_type_col、Long_type_col、Text_type_col三个属性列,类型分别设置为不分词字符串(KEYWORD),整型(LONG),分词字符串(TEXT)
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    //指定表名和索引名
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col,FieldType.KEYWORD){ //设置字段名和字段类型
            index =true, //开启索引
            EnableSortAndAgg =true //开启排序和统计功能
        },
        new FieldSchema(Long_type_col,FieldType.LONG){ index=true,EnableSortAndAgg=true},
        new FieldSchema(Text_type_col,FieldType.TEXT){ index=true}
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas
    };
    //调用client,创建SearchIndex
    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("Searchindex is created: " + IndexName);
}

指定IndexSort的示例

/// <summary>
/// 创建一个多元索引,包含Keyword_type_col、Long_type_col、Text_type_col三个属性列,类型分别设置为不分词字符串(KEYWORD),整型(LONG),分词字符串(TEXT)
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
    //指定表名和索引名
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col,FieldType.KEYWORD){ //设置字段名和字段类型
            index =true, //开启索引
            EnableSortAndAgg =true //开启排序和统计功能
        },
        new FieldSchema(Long_type_col,FieldType.LONG){ index=true,EnableSortAndAgg=true},
        new FieldSchema(Text_type_col,FieldType.TEXT){ index=true}
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas,
        //按照Long_type_col这一列进行预排序,Long_type_col这一列必须建立索引,并打开EnableSortAndAgg
        IndexSort = new DataModel.Search.Sort.Sort()
        {
            Sorters = new List<DataModel.Search.Sort.ISorter>
            {
                new DataModel.Search.Sort.FieldSort(Long_type_col, DataModel.Search.Sort.SortOrder.ASC)
            }
        }
    };

    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("Searchindex is created: " + IndexName);
}