You can call the CreateSearchIndex operation to create one or more search indexes for a data table.
Prerequisites
- A Tablestore client is initialized. For more information, see Initialization.
- A data table is created for which the value of the timeToLive parameter is set to -1 and the value of the maxVersions parameter is set to 1.
Parameters
When you create a search index, you must specify tableName, indexName, and schema. You must also specify fieldSchemas, indexSetting, and indexSort in schema. The following table describes the parameters.
Parameter | Description |
---|---|
tableName | The name of the data table. |
indexName | The name of the search index. |
fieldSchemas | The list of field schemas. You can configure the following parameters for each field schema:
|
indexSetting | The settings of the search index, including routingFields. routingFields: optional. This parameter specifies custom routing fields. You can specify some primary key columns as routing fields. Tablestore distributes data that is written to a search index across different partitions based on the specified routing fields. The data whose routing field values are the same is distributed to the same partition. |
indexSort | The presorting settings of the search index, including sorters. If no value is specified for the indexSort parameter, field values are sorted by primary key by default.
Note You can skip the presorting settings for search indexes that contain fields of the Nested type.
sorters: required. This parameter specifies the presorting method for the search index. PrimaryKeySort and FieldSort are supported. For more information about sorting, see
Sorting and paging.
|
Examples
/**
*Create a search index that contains columns Col_Keyword, Col_Long, Col_Text, and Col_Nested.
*Set the type of data in Col_Keyword to Keyword, in Col_Long to Long, in Col_Text to Text, and in Col_Nested to Nested.
*/
client.createSearchIndex({
tableName: TABLE_NAME, // Specify the name of the data table.
indexName: INDEX_NAME, // Specify the name of the search index.
schema: {
fieldSchemas: [
{
fieldName: "Col_Keyword",
fieldType: TableStore.FieldType.KEYWORD, // Specify the name and type of the field.
index: true, // Enable the indexing feature.
enableSortAndAgg: true, // Enable the sorting and aggregation features.
store: false,
isAnArray: false
},
{
fieldName: "Col_Long",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
store: true,
isAnArray: false
},
{
fieldName: "Col_Text",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
store: true,
isAnArray: false,
analyzer: "single_word"
},
// {
// fieldName: "Col_Nested",
// fieldType: TableStore.FieldType.NESTED,
// index: false,
// enableSortAndAgg: false,
// store: false,
// fieldSchemas: [ // Specify the schemas of subfields in a Nested field.
// {
// fieldName: "Sub_Col_KeyWord",
// fieldType: TableStore.FieldType.KEYWORD,
// index: true,
// enableSortAndAgg: true,
// store: false
// },
// {
// fieldName: "Sub_Col_Long",
// fieldType: TableStore.FieldType.LONG,
// index: true,
// enableSortAndAgg: true,
// store: false
// }
// ]
// }
],
indexSetting: { // Configure the search index.
"routingFields": ["Pk_Keyword"], // Only primary key columns can be set to routing fields.
"routingPartitionSize": null
},
indexSort: {// Search indexes that contain Nested fields do not support indexSort.
sorters: [
// { // If indexSort is not specified, data is sorted by primary key in ascending order by default.
// primaryKeySort: {
// order: TableStore.SortOrder.SORT_ORDER_ASC
// }
// },
{
fieldSort: {
fieldName: "Col_Keyword",
order: TableStore.SortOrder.SORT_ORDER_DESC // Specify the index sorting order.
}
}
]
},
timeToLive: 1000000, // Unit: seconds.
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});