CreateSearchIndex

如果要在某张表上使用Search功能,那么首先需要在这张表上创建一个多元索引。创建多元索引时,需要指定表名(table_name)、索引名(index_name)、索引的结构信息(index_schema)。

  • table_name:要创建的多元索引所属的表名。
  • index_name:要创建的多元索引的名字。
  • schema:包含index_setting(索引设置)、field_schemas(Index的所有字段的设置)、index_sort(index_sort的设置)
    • field_schemas:FieldSchema的列表,每个FieldSchema包含以下内容:
      • (必选)field_fame:String。要索引的字段名,即列名。可以是主键列,也可以是属性列。
      • (必选)field_type:FieldTypeConst::XXX段类型,详见SearchIndex字段类型一节。
      • (可选)is_array:bool值。是否为数组。如果为true,则表示该列是一个数组,在写入时,也必须按照json数组格式写入,比如["a","b","c"]。NESTED类型本身就是一个数组,所以无须设置Array。
      • (可选)index:bool值。是否开启索引。
      • (可选)index_options:索引的配置选项。
      • (可选)analyzer:分词器设置。
      • (可选)enable_sort_and_agg:bool值。是否开启排序与统计功能。
      • (可选)store:bool值。是否在多元索引中附加存储该字段的值。开启后,可以直接从多元索引中读取该字段的值,而不必反查主表,可用于查询性能优化。
    • (可选)index_setting:
      • (高级功能,可选配置)routing_fields:自定义路由字段。可以选择部分主键列作为路由字段,在进行索引数据写入时,会根据路由字段的值计算索引数据的分布位置,路由字段的值相同的记录会被索引到相同的数据分区中。
    • (可选)index_sort:默认基于主键做index_sort
      • sorters:索引排序(数组)支持primaryKeySort和fieldSort
        • primary_key_sort:
          • order: 默认正序SortOrderConst::SORT_ORDER_ASC
        • field_sort:自定义字段做indexSort
          • field_name: 设置indexSort字段
          • order:默认正序SortOrderConst::SORT_ORDER_ASC
接口
    /**
     * 创建索引。
     * @api
     *
     * @param [] $request
     *            请求参数,表名,索引配置等。
     * @return [] 请求返回
     * @throws OTSClientException 当参数检查出错或服务端返回校验出错时
     * @throws OTSServerException 当OTS服务端返回错误时
     * @example "src/examples/CreateSearchIndex.php"
     */
    public function createSearchIndex(array $request)
示例
$request = array(
    'table_name' => 'php_sdk_test',
    'index_name' => 'php_sdk_test_search_index',
    'schema' => array(
        'field_schemas' => array(
            array(
                'field_name' => 'keyword',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => true,
                'store' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'text',
                'field_type' => FieldTypeConst::TEXT,
                'analyzer' => 'single_word',
                'index' => true,
                'enable_sort_and_agg' => false,
                'store' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'geo',
                'field_type' => FieldTypeConst::GEO_POINT,
                'index' => true,
                'index_options' => 'DOCS',
                'enable_sort_and_agg' => true,
                'store' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'long',
                'field_type' => FieldTypeConst::LONG,
                'index' => true,
                'enable_sort_and_agg' => true,
                'store' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'double',
                'field_type' => FieldTypeConst::DOUBLE,
                'index' => true,
                'enable_sort_and_agg' => true,
                'store' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'boolean',
                'field_type' => FieldTypeConst::BOOLEAN,
                'index' => true,
                'enable_sort_and_agg' => false,
                'store' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'array',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => false,
                'store' => true,
                'is_array' => true
            ),
            array(
                'field_name' => 'nested',
                'field_type' => FieldTypeConst::NESTED,
                'index' => false,
                'enable_sort_and_agg' => false,
                'store' => false,
                'field_schemas' => array(
                    array(
                        'field_name' => 'nested_keyword',
                        'field_type' => FieldTypeConst::KEYWORD,
                        'index' => false,
                        'enable_sort_and_agg' => false,
                        'store' => false,
                        'is_array' => false
                    )
                )
            ),
        ),
        'index_setting' => array(
            'routing_fields' => array("pk1")
        ),
//        "index_sort" => array(//含nested类型索引是,不能设置index_sort
//            array(
//                'field_sort' => array(
//                    'field_name' => 'keyword',
//                    'order' => SortOrderConst::SORT_ORDER_ASC,
//                    'mode' => SortModeConst::SORT_MODE_AVG,
//                )
//            ),
//            array(
//                'pk_sort' => array(
//                    'order' => SortOrderConst::SORT_ORDER_ASC
//                )
//            ),
//        )
    )
);
$response = $otsClient->createSearchIndex();