Utilice el Tablestore SDK for Go para ordenar los resultados por valor de campo, puntuación de relevancia, clave principal o distancia geográfica, y para paginar mediante tokens.
Requisitos previos
Instale Tablestore Go SDK e inicialice un cliente.
Descripción
Puede configurar uno o varios criterios de ordenación. Los resultados se comparan según el orden de la lista de dichos criterios. Si no se configura ninguno, se utiliza el IndexSort definido durante la creación del índice de búsqueda. Si no se ha configurado IndexSort, se aplica de forma predeterminada la ordenación por clave principal. IndexSort solo admite PrimaryKeySort y FieldSort. Una vez creado el índice, puede modificar IndexSort mediante dynamically modifying the schema. ScoreSort ordena según la puntuación de relevancia BM25 y solo surte efecto cuando se configura explícitamente.
Cuando se especifica un criterio de ordenación que no es de clave principal, el servidor añade de forma predeterminada un criterio de clave principal para garantizar un orden determinista en las filas con valores de ordenación iguales. DisableDefaultPkSorter tiene el valor predeterminado false. No deshabilite este comportamiento para la paginación basada en tokens. Si existen valores de ordenación duplicados y la ordenación por clave principal está deshabilitada, podrían omitirse algunas filas.
Un índice de búsqueda que contiene un campo Nested no es compatible con IndexSort. Para paginar una consulta en este tipo de índice, configure explícitamente la ordenación en la solicitud de consulta. De lo contrario, el servidor no devolverá NextToken aunque haya más datos disponibles.
Al utilizar ScoreSort, los campos FuzzyKeyword no participan en la ordenación y Weight no tiene efecto sobre ellos.
searchQuery := search.NewSearchQuery().
SetQuery(&search.MatchAllQuery{}).
SetLimit(10).
SetSort(&search.Sort{Sorters: []search.Sorter{
&search.FieldSort{
FieldName: "price",
Order: search.SortOrder_DESC.Enum(),
},
}})
for {
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_index",
SearchQuery: searchQuery,
})
if err != nil {
log.Fatal(err)
}
for _, row := range response.Rows {
fmt.Println(row)
}
if len(response.NextToken) == 0 {
break
}
searchQuery.SetToken(response.NextToken)
}
Parámetros
Configuración de ordenación
|
Nombre |
Tipo |
Descripción |
|
Sorters (obligatorio) |
[]search.Sorter |
Los criterios de ordenación. Se admiten FieldSort, ScoreSort, PrimaryKeySort y GeoDistanceSort, los cuales surten efecto según su orden en la lista. DocSort solo puede configurarse explícitamente en NestedQuery.InnerHits y no puede utilizarse como criterio de ordenación de nivel superior en Search. |
|
DisableDefaultPkSorter (opcional) |
*bool |
Especifica si se debe deshabilitar el criterio de ordenación de clave principal que añade el servidor. Valor predeterminado: false. Este parámetro es compatible con Tablestore SDK for Go versión 1.7.16 y posteriores. |
Ordenación por valor de campo
|
Nombre |
Tipo |
Descripción |
|
FieldName (obligatorio) |
string |
El campo utilizado para la ordenación. La ordenación y la agregación deben estar habilitadas para dicho campo. |
|
Order (opcional) |
*search.SortOrder |
El orden de clasificación. Los valores válidos son search.SortOrder_ASC y search.SortOrder_DESC. Valor predeterminado: ascendente. |
|
Mode (opcional) |
*search.SortMode |
El método de selección de valores para un campo con varios valores. Los valores válidos son search.SortMode_Min, search.SortMode_Max y search.SortMode_Avg. |
|
NestedFilter (opcional) |
*search.NestedFilter |
La configuración de ordenación para un campo secundario Nested. Especifique este parámetro únicamente cuando ordene por un campo secundario Nested. |
|
MissingValue (opcional) |
interface{} |
El valor de ordenación que se utiliza cuando faltan todos los campos especificados por FieldName y MissingFields. search.FirstWhenMissing coloca los valores faltantes al principio sin importar el orden de clasificación. search.LastWhenMissing o nil los coloca al final. También puede especificar un valor personalizado del tipo de campo para la ordenación. |
|
MissingField (opcional) |
*string |
Un campo de ordenación alternativo. Este parámetro está obsoleto. Utilice MissingFields. |
|
MissingFields (opcional) |
[]string |
Campos de ordenación alternativos. Si falta el campo especificado por FieldName, se utiliza para la ordenación el primer campo existente según el orden de la lista. Puede especificar hasta tres campos. Deben tener el mismo tipo que el campo indicado en FieldName, y tanto la ordenación como la agregación deben estar habilitadas para todos ellos. Este parámetro es compatible con Tablestore SDK for Go versión 1.9.0 y posteriores. |
Filtro anidado
|
Nombre |
Tipo |
Descripción |
|
Path (obligatorio) |
string |
La ruta del campo Nested. |
|
Filter (obligatorio) |
search.Query |
La consulta que filtra las filas secundarias Nested utilizadas para la ordenación. Utilice MatchAllQuery para incluir todas las filas secundarias. |
Ordenación por puntuación, clave principal y orden de documento
|
Nombre |
Tipo |
Descripción |
|
ScoreSort.Order (opcional) |
*search.SortOrder |
El orden de la puntuación de relevancia BM25. search.NewScoreSort() ordena las puntuaciones de forma descendente de manera predeterminada. |
|
PrimaryKeySort.Order (opcional) |
*search.SortOrder |
El orden de la clave principal. search.NewPrimaryKeySort() ordena las claves principales de forma ascendente de manera predeterminada. |
|
DocSort.SortOrder (opcional) |
*search.SortOrder |
El orden de los documentos dentro de NestedQuery.InnerHits. Valor predeterminado: ascendente. DocSort es compatible con Tablestore SDK for Go versión 1.7.12 y posteriores. |
Ordenación por distancia geográfica
|
Nombre |
Tipo |
Descripción |
|
FieldName (obligatorio) |
string |
El nombre del campo de punto geográfico. |
|
Points (obligatorio) |
[]string |
Los puntos de destino utilizados para calcular distancias. Utilice el formato |
|
Order (opcional) |
*search.SortOrder |
El orden de clasificación por distancia. search.SortOrder_ASC ordena del más cercano al más lejano, mientras que search.SortOrder_DESC ordena del más lejano al más cercano. |
|
Mode (opcional) |
*search.SortMode |
El método de selección de valores cuando existen varias distancias. Los valores válidos son search.SortMode_Min, search.SortMode_Max y search.SortMode_Avg. |
|
GeoDistanceType (opcional) |
*search.GeoDistanceType |
El método de cálculo de distancia. search.GeoDistanceType_ARC calcula la distancia sobre una esfera y ofrece mayor precisión. search.GeoDistanceType_PLANE calcula la distancia sobre un plano y consume menos recursos. Valor predeterminado: ARC. |
|
NestedFilter (opcional) |
*search.NestedFilter |
La ruta y el filtro utilizados para ordenar un campo secundario Nested. |
Configuración de paginación
|
Nombre |
Tipo |
Descripción |
|
Limit (opcional) |
int32 |
El número máximo de filas por página. Valor predeterminado: 10. Por lo general, el máximo es 100. Si todas las columnas devueltas se almacenan en el índice de búsqueda, el límite puede aumentarse a 1,000. Para obtener más información, consulte How do I increase the limit of a search index query to 1,000?. En la paginación basada en desplazamiento, la suma de Offset + Limit no puede exceder 100,000. |
|
Offset (opcional) |
int32 |
La posición inicial. Valor predeterminado: 0. Utilice este parámetro para una paginación superficial dentro de las primeras 100,000 filas. |
|
Token (opcional) |
[]byte |
El valor NextToken de la respuesta anterior. Utilice este parámetro para realizar una paginación profunda consecutiva. SetToken borra Sort porque el token contiene las condiciones de ordenación de la página previa. No especifique Offset para la paginación basada en tokens. Codifique en Base64 el token binario para almacenarlo o transmitirlo mediante protocolos de texto o entre procesos. |
La paginación basada en tokens avanza únicamente hacia adelante de forma predeterminada. Para regresar a una página anterior, almacene en caché y reutilice un token previo. Este método de paginación no está sujeto al límite de profundidad de 100,000 filas.
Respuesta
|
Nombre |
Tipo |
Descripción |
|
Rows |
[]*tablestore.Row |
Las filas devueltas por la consulta actual. La cantidad no excede Limit. |
|
SearchHits |
[]*tablestore.SearchHit |
Los resultados de la búsqueda. Lea este campo cuando utilice puntuaciones de relevancia, resaltado o Nested InnerHits. |
|
TotalCount |
int64 |
El número total de filas coincidentes. El valor depende de SetGetTotalCount y no corresponde a la cantidad de filas de la página actual. |
|
NextToken |
[]byte |
El token para la siguiente página. Un valor vacío indica que no hay más datos o que la consulta actual carece de un orden de clasificación determinista. |
|
IsAllSuccess |
bool |
Indica si se consultaron todas las particiones del índice. Si el valor es false, se devuelven resultados parciales. |