Puede utilizar el método CreateSearchIndex para crear uno o varios índices de búsqueda en una tabla de datos. Al crear un índice de búsqueda, debe agregar al índice los campos que desea consultar. También puede configurar opciones avanzadas, como campos de enrutamiento y preordenación.
Requisitos previos
Se ha inicializado un cliente de Tablestore. Para obtener más información, consulte Initialize a Tablestore client.
-
Se ha creado una tabla de datos que cumple con las siguientes condiciones. Para obtener más información, consulte Create a data table.
El número máximo de versiones está establecido en 1.
El tiempo de vida (TTL) está establecido en -1 o la operación UpdateRow está deshabilitada para la tabla de datos.
Notas de uso
Los data types de los campos en el índice de búsqueda deben coincidir con los tipos de datos de los campos en la tabla de datos.
Para establecer el TTL de un índice de búsqueda en un valor distinto de -1, deshabilite la operación UpdateRow para la tabla de datos. El TTL del índice de búsqueda debe ser menor o igual que el TTL de la tabla de datos. Para obtener más información, consulte Lifecycle management.
Parámetros
Para crear un índice de búsqueda, especifique el nombre de la tabla (tableName), el nombre del índice (indexName) y el esquema del índice (schema). El esquema incluye esquemas de campos (fieldSchemas), configuración del índice (indexSetting) y ajustes de preordenación del índice (indexSort).
|
Parámetro |
Descripción |
|
tableName |
El nombre de la tabla de datos. |
|
indexName |
El nombre del índice de búsqueda. |
|
fieldSchemas |
La lista de esquemas de campos. Cada esquema de campo contiene los siguientes parámetros:
|
|
indexSetting |
La configuración del índice, que incluye el ajuste routingFields. routingFields (opcional): Los campos de enrutamiento personalizados. Puede seleccionar algunas columnas de clave primaria como campos de enrutamiento. En la mayoría de los casos, solo necesita establecer uno. Si establece varias claves de enrutamiento, el sistema concatena los valores de las claves de enrutamiento en un solo valor. Durante la escritura de datos del índice, el sistema distribuye los datos del índice según los valores de los campos de enrutamiento. Los registros con los mismos valores de campo de enrutamiento se almacenan en la misma partición de datos. |
|
indexSort |
La configuración de preordenación del índice, que incluye el ajuste sorters. Si no se establece, los datos se ordenan por clave primaria de forma predeterminada. Nota
Los índices que contienen campos anidados no admiten indexSort. No se realiza ninguna preordenación. sorters (obligatorio): El método de preordenación para el índice. Admite la ordenación por clave primaria o por valor de campo. Para obtener más información, consulte Sorting and paging.
|
|
timeToLive |
Opcional. El tiempo de vida (TTL) de los datos, que corresponde al período de retención de datos. Unidad: segundos. Valor predeterminado: -1, lo que significa que los datos nunca caducan. El valor mínimo de TTL es 86400 segundos (un día). Cuando el período de retención de datos supera el TTL, los datos caducados se limpian automáticamente. |
Ejemplos
Crear un índice de búsqueda y establecer un tokenizer
El siguiente ejemplo crea un índice de búsqueda con estas columnas: pic_id (Keyword), count (Long), time_stamp (Long), pic_description (Text), col_vector (Vector), pos (Geo-point), pic_tag (Nested), date (Date), analyzer_single_word (Text), analyzer_split (Text) y analyzer_fuzzy (Text). La columna pic_tag tiene dos subcampos: sub_tag_name (Keyword) y tag_name (Keyword). La columna analyzer_single_word utiliza tokenización de palabra única, analyzer_split utiliza tokenización por delimitador y analyzer_fuzzy utiliza tokenización difusa.
client.createSearchIndex({
tableName: "<TABLE_NAME>", // Set the table name.
indexName: "<INDEX_NAME>", // Set the search index name.
schema: {
fieldSchemas: [
{
fieldName: "pic_id",
fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
index: true, // Enable indexing.
enableSortAndAgg: true, // Enable sorting and aggregation.
isAnArray: false
},
{
fieldName: "count",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
isAnArray: false
},
{
fieldName: "time_stamp",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: false,
isAnArray: false,
},
{
fieldName: "pic_description",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
isAnArray: false,
},
{
fieldName: "col_vector",
fieldType: TableStore.FieldType.VECTOR,
index: true,
isAnArray: false,
vectorOptions: {
dataType: TableStore.VectorDataType.VD_FLOAT_32,
dimension: 4,
metricType: TableStore.VectorMetricType.VM_COSINE,
}
},
{
fieldName: "pos",
fieldType: TableStore.FieldType.GEO_POINT,
index: true,
enableSortAndAgg: true,
isAnArray: false,
},
{
fieldName: "pic_tag",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
fieldSchemas: [
{
fieldName: "sub_tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
}
]
},
{
fieldName: "date",
fieldType: TableStore.FieldType.DATE,
index: true,
enableSortAndAgg: true,
isAnArray: false,
dateFormats: ["yyyy-MM-dd'T'HH:mm:ss.SSSSSS"],
},
{
fieldName: "analyzer_single_word",
fieldType: TableStore.FieldType.TEXT,
analyzer: "single_word",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
caseSensitive: true,
delimitWord: false,
}
},
{
fieldName: "analyzer_split",
fieldType: TableStore.FieldType.TEXT,
analyzer: "split",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
delimiter: ",",
}
},
{
fieldName: "analyzer_fuzzy",
fieldType: TableStore.FieldType.TEXT,
analyzer: "fuzzy",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
minChars: 1,
maxChars: 5,
}
},
],
indexSetting: { // The configuration options of the index.
"routingFields": ["count", "pic_id"], // Only primary key columns can be set as routing fields.
"routingPartitionSize": null
},
//indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
//sorters: [
// { // If you do not set indexSort, the 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 // Set the sorting order for indexSort.
// }
//}
//]
//},
timeToLive: 1000000, // Unit: seconds.
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});
Crear un índice de búsqueda y habilitar el resaltado
El siguiente ejemplo crea un índice de búsqueda con el resaltado habilitado. El índice tiene tres campos: k (Keyword), t (Text) y n (Nested). El campo n tiene tres subcampos: nk (Keyword), nl (Long) y nt (Text). El resaltado está habilitado para el campo t y el subcampo nt.
client.createSearchIndex({
tableName: "<TABLE_NAME>", // Set the table name.
indexName: "<SEARCH_INDEX_NAME>", // Set the search index name.
schema: {
fieldSchemas: [
{
fieldName: "k",
fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
index: true, // Enable indexing.
enableSortAndAgg: true, // Enable sorting and aggregation.
isAnArray: false
},
{
fieldName: "t",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // Enable highlighting for the field.
isAnArray: false,
},
{
fieldName: "n",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
fieldSchemas: [
{
fieldName: "nk",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "nl",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "nt",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // Enable highlighting for the field.
},
]
},
],
indexSetting: { // The configuration options of the index.
"routingFields": ["id"], // Only primary key columns can be set as routing fields.
"routingPartitionSize": null
},
//indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
//sorters: [
// { // If you do not set indexSort, the 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 // Set the sorting order for indexSort.
// }
//}
//]
//},
timeToLive: 1000000, // Unit: seconds.
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});
Preguntas frecuentes
Differences between range queries using the GetRange and Search operations
Data cannot be found using the Search operation of a search index
Does Tablestore support queries similar to IN and BETWEEN...AND in relational databases?
The "field:xx must enable enable_sort_and_agg" error occurs when you use a search index
Referencias
Después de crear un índice de búsqueda, seleccione un tipo de consulta para realizar consultas de datos multidimensionales. Los tipos de consulta compatibles incluyen term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, geo query, Boolean query, vector search, nested query y exists query.
Al consultar datos, aplique operaciones de sorting and paging, highlighting o collapse (deduplication) en el conjunto de resultados.
Después de crear un índice de búsqueda, gestiónele según sea necesario. Las operaciones incluyen dynamically modifying the schema, updating the search index configuration, listing search indexes, querying search index descriptions y deleting a search index.
Para realizar análisis de datos, como encontrar el valor máximo o mínimo, calcular una suma o contar filas, utilice la función statistical aggregation o la función SQL query.
Para exportar datos rápidamente sin requerir un orden específico, utilice la función parallel scan.