Cree uno o varios índices de búsqueda para una tabla de datos mediante el método CreateSearchIndex. Al crear un índice de búsqueda, especifique los campos que desea consultar y, de forma opcional, configure opciones avanzadas como claves de enrutamiento personalizadas y ordenación previa.
Requisitos previos
Antes de empezar, compruebe lo siguiente:
El cliente de Tablestore está inicializado. Para más información, consulte Initialize the Tablestore Client.
-
Se creó una tabla de datos que cumple las siguientes condiciones. Para más información, consulte Create a data table.
El número máximo de versiones se estableció en 1.
El tiempo de vida (TTL) se estableció en -1 o la tabla de datos tiene deshabilitadas las actualizaciones.
Compatibilidad de tipos de campo
El data type de cada campo del índice de búsqueda debe coincidir con el tipo de dato del campo correspondiente en la tabla de datos.
Parámetros
Para crear un índice de búsqueda, especifique el nombre de la tabla (TableName), el nombre del índice de búsqueda (IndexName) y el esquema del índice (IndexSchema). El IndexSchema contiene FieldSchemas (configuración de campos), IndexSetting (configuración del índice) e IndexSort (configuración de ordenación previa).
|
Parámetro |
Descripción |
|
TableName |
El nombre de la tabla de datos. |
|
IndexName |
El nombre del índice de búsqueda. |
|
FieldSchemas |
Una lista de objetos FieldSchema. Cada objeto FieldSchema contiene los siguientes parámetros:
|
|
IndexSetting |
Configuración del índice. Contiene el siguiente parámetro: RoutingFields (opcional): campos de enrutamiento personalizados. Seleccione una o varias columnas de clave primaria como campos de enrutamiento. En la mayoría de los casos, un solo campo de enrutamiento es suficiente. Si establece varias claves de enrutamiento, el sistema concatena sus valores en uno solo. Los registros con los mismos valores de campo de enrutamiento se indexan en la misma partición de datos. |
|
IndexSort |
Configuración de ordenación previa del índice. Si no se especifica, los datos se ordenan por clave primaria de forma predeterminada. Los índices que contienen campos Nested no admiten IndexSort. Sorters (obligatorio): el método de ordenación previa. Admite la ordenación por clave primaria o por valor de campo. Para más información, consulte Sorting and pagination.
|
|
TimeToLive |
Opcional. El tiempo de vida (TTL) de los datos en el índice de búsqueda, en segundos. Valor predeterminado: -1 (los datos nunca caducan). Valor mínimo: 86400 segundos (un día). Los datos caducados se limpian automáticamente cuando el periodo de retención supera el TTL configurado. |
Ejemplos
Crear un índice de búsqueda con la configuración predeterminada
Cree un índice de búsqueda con tres campos: Keyword_type_col (Keyword), Long_type_col (Long) y Text_type_col (Text). Habilite la ordenación y la agregación en los campos Keyword y Long.
/// <summary>
/// Creates a search index with three attribute columns: Keyword_type_col, Long_type_col, and Text_type_col.
/// Field types: Keyword (non-tokenized string), Long (integer), and Text (tokenized string).
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
// Set the table name and search index name.
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
index = true, // Enable indexing.
EnableSortAndAgg = true // Enable sorting and aggregation.
},
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
};
// Create the search index.
CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
Console.WriteLine("Searchindex is created: " + IndexName);
}
Crear un índice de búsqueda y especificar IndexSort
Cree un índice de búsqueda con tres campos: Keyword_type_col (Keyword), Long_type_col (Long) y Text_type_col (Text). Ordene previamente los resultados por el campo Long_type_col en orden ascendente.
/// <summary>
/// Creates a search index with three attribute columns: Keyword_type_col, Long_type_col, and Text_type_col.
/// Field types: Keyword (non-tokenized string), Long (integer), and Text (tokenized string).
/// Pre-sorts results by Long_type_col in ascending order.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
// Set the table name and search index name.
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,
// Pre-sort by Long_type_col (ascending). The field must have EnableSortAndAgg enabled.
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);
}
Crear un índice de búsqueda que contiene una columna de fecha y una columna virtual
Cree un índice de búsqueda con cinco campos: pk0 (Keyword), pk1 (Long), date_col (Date), geo_col (Geo-point) y col0_v1 (Text). La columna virtual col0_v1 se asigna a la columna de origen col0. Los resultados se ordenan previamente por pk1 en orden ascendente.
/// <summary>
/// Creates a search index that includes a Date field and a virtual column.
/// The virtual column col0_v1 maps to the source column col0 in the data table.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
List<FieldSchema> fieldSchemas = new List<FieldSchema> {
new FieldSchema("pk0", FieldType.KEYWORD)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("pk1", FieldType.LONG)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("date_col", FieldType.DATE)
{
index = true,
DateFormats = new List<string>(){
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
"yyyy-MM-dd'T'HH:mm:ss.SSS"
}
},
new FieldSchema("geo_col", FieldType.GEO_POINT)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("col0_v1", FieldType.TEXT)
{
index = true,
Analyzer = Analyzer.Split,
AnalyzerParameter = new SingleWordAnalyzerParameter(true, true),
IsVirtualField = true,
SourceFieldNames = new List<string> { "col0" } // Maps to source column col0.
},
};
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
request.IndexSchame = new IndexSchema()
{
FieldSchemas = fieldSchemas,
IndexSort = new Sort(new List<ISorter> { new FieldSort("pk1", SortOrder.ASC) })
};
request.TimeToLive = -1; // Data never expires.
otsClient.CreateSearchIndex(request);
}
Preguntas frecuentes
Pasos siguientes
Consulte el índice de búsqueda mediante diversos tipos de consulta para realizar análisis de datos multidimensionales, entre ellos term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, geo query, Boolean query, nested query y exists query.
Aplique sorting and pagination o collapse (deduplication) a los resultados de la consulta.
Gestione los índices de búsqueda mediante dynamically modifying the schema, listing search indexes, querying the description of a search index y deleting a search index.
Para análisis como buscar el valor máximo o mínimo, calcular sumas o contar filas, utilice la función statistical aggregation o SQL query.
Si necesita exportar datos rápidamente sin requerir un orden específico en los resultados, utilice la función parallel scan.