Use una consulta Exists en el Tablestore SDK for Go para obtener las filas que contienen un campo de índice específico.
Requisitos previos
Instale Tablestore Go SDK e inicialice un cliente.
Descripción
Una consulta Exists obtiene las filas que contienen el campo de índice especificado, sin importar el valor del campo. Establezca el tipo de consulta como ExistsQuery.
Un índice de búsqueda considera que un campo no existe en los siguientes casos:
La fila de la tabla de datos no contiene el campo.
El campo está indexado como un arreglo de un tipo básico, como Keyword, y su valor en la tabla de datos es un arreglo vacío.
func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)
En el siguiente ejemplo se consultan datos y se devuelven hasta 10 filas, junto con el número total de filas coincidentes.
tableName := "example_table"
indexName := "example_index"
query := &search.ExistsQuery{FieldName: "status"}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)
Parámetros
Solicitud de consulta
request es de tipo tablestore.SearchRequest y contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
TableName (obligatorio) |
string |
Nombre de la tabla de datos. |
|
IndexName (obligatorio) |
string |
Nombre del índice de búsqueda. |
|
SearchQuery (obligatorio) |
search.SearchQuery |
Condición de consulta y configuraciones generales de la consulta. |
|
ColumnsToGet (opcional) |
*tablestore.ColumnsToGet |
Configuración de columnas a devolver. Si se omite este parámetro, solo se devuelven las columnas de clave principal. |
|
RoutingValues (opcional) |
[]*tablestore.PrimaryKey |
Valores de clave principal para campos de enrutamiento personalizado. Omita este parámetro si no se ha configurado el enrutamiento personalizado. |
|
TimeoutMs (opcional) |
*int32 |
Tiempo de espera de la solicitud en milisegundos. |
Configuración de la consulta
Cree una configuración de consulta mediante search.NewSearchQuery() y configúrela con los siguientes métodos.
|
Nombre |
Tipo |
Descripción |
|
SetQuery (obligatorio) |
search.Query |
Especifica la condición de consulta. |
|
SetOffset (opcional) |
int32 |
Especifica la posición inicial. Valor predeterminado: 0. En la paginación basada en desplazamiento, la suma de Offset y Limit no puede superar 100,000. |
|
SetLimit (opcional) |
int32 |
Especifica el número máximo de filas a devolver. Valor predeterminado: 10. Valor máximo: 100. Un valor de 0 no devuelve ninguna fila. |
|
SetCollapse (opcional) |
*search.Collapse |
Colapsa los resultados de la consulta. Para más información, consulte Collapse query results. |
|
SetSort (opcional) |
*search.Sort |
Especifica el orden de clasificación de los resultados. Para más información, consulte Sort and paginate results. |
|
SetGetTotalCount (opcional) |
bool |
Especifica si se deben contar todas las filas coincidentes. Valor predeterminado: false. |
|
SetToken (opcional) |
[]byte |
Especifica el valor NextToken devuelto por la respuesta anterior. Este método borra Sort porque el token contiene las condiciones de clasificación de la página anterior. No especifique Offset cuando utilice paginación basada en tokens. |
|
SetSearchFilter (opcional) |
*search.SearchFilter |
Aplica un filtro posterior a la consulta. Para más información, consulte Use post-query filters. |
|
Aggregation (opcional) |
...search.Aggregation |
Configura agregaciones. Para más información, consulte Aggregation. |
|
GroupBy (opcional) |
...search.GroupBy |
Configura agrupaciones. Para más información, consulte Aggregation. |
Condición de consulta
La consulta es de tipo search.ExistsQuery y contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
FieldName (obligatorio) |
string |
Nombre del campo de índice cuya existencia se comprueba. |
Columnas a devolver
request.ColumnsToGet es de tipo tablestore.ColumnsToGet y contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
Columns (opcional) |
[]string |
Columnas de atributos a devolver. Este parámetro solo tiene efecto cuando ReturnAll y ReturnAllFromIndex son false. |
|
ReturnAll (opcional) |
bool |
Especifica si se deben devolver todas las columnas de atributos de la tabla de datos. Valor predeterminado: false. |
|
ReturnAllFromIndex (opcional) |
bool |
Especifica si se deben devolver todas las columnas de atributos indexadas. Valor predeterminado: false. No establezca este parámetro y ReturnAll como true al mismo tiempo. |
Respuesta
El método Search devuelve un valor tablestore.SearchResponse. La siguiente tabla describe los campos principales de negocio.
|
Nombre |
Tipo |
Descripción |
|
TotalCount |
int64 |
Número total de filas coincidentes. El valor depende de SetGetTotalCount. |
|
Rows |
[]*tablestore.Row |
Filas devueltas por la consulta actual. La cantidad no supera el valor especificado en SetLimit. |
|
SearchHits |
[]*tablestore.SearchHit |
Resultados de la búsqueda. Lea este campo cuando utilice resaltado, resultados internos anidados o puntuaciones de relevancia. |
|
NextToken |
[]byte |
Token para la siguiente página. Si el valor no está vacío, páselo a la siguiente consulta. |
|
IsAllSuccess |
bool |
Indica si se consultaron todas las particiones del índice. Si el valor es false, se devuelven resultados parciales y TotalCount podría ser menor que el número real de filas coincidentes. |
|
AggregationResults |
search.AggregationResults |
Resultados de la agregación. |
|
GroupByResults |
search.GroupByResults |
Resultados de la agrupación. |
Ejemplos
Consultar un subcampo de un campo Nested
Para ejecutar una consulta Exists sobre un campo Nested, use ExistsQuery como subconsulta de nested query. Establezca Path con la ruta completa del campo Nested y FieldName con la ruta completa del subcampo.
query := &search.NestedQuery{
Path: "contacts",
Query: &search.ExistsQuery{
FieldName: "contacts.phone",
},
ScoreMode: search.ScoreMode_None,
}
Consultar filas donde no existe un campo
Use ExistsQuery como subconsulta en BoolQuery.MustNotQueries para obtener las filas que no contienen el campo de índice especificado.
query := &search.BoolQuery{
MustNotQueries: []search.Query{
&search.ExistsQuery{FieldName: "status"},
},
}