Lorsque vous utilisez un index de recherche pour interroger des données, appliquez une méthode de tri prédéfinie ou spécifiez-en une personnalisée. Les lignes répondant aux conditions de requête sont ainsi renvoyées selon l'ordre défini. Si la réponse contient un grand nombre de lignes, localisez les données requises en configurant les paramètres limit et offset ou en utilisant des jetons (tokens).
Scénarios
|
Catégorie |
Méthode |
Fonctionnalité |
Scénario |
|
Tri |
Spécifiez une méthode de tri lors de la création d'un index de recherche |
Par défaut, les données d'un index de recherche sont triées selon les paramètres de pré-tri définis par le paramètre |
|
|
Spécifiez une méthode de tri lors de l'interrogation des données |
Utilisez ScoreSort pour trier les résultats de requête en fonction du score de pertinence des mots-clés basé sur l'algorithme BM25. ScoreSort convient aux scénarios tels que la recherche en texte intégral. |
||
|
Utilisez PrimaryKeySort pour trier les résultats de requête en fonction de la valeur de la clé primaire. PrimaryKeySort est adapté aux scénarios où vous souhaitez trier les données selon leurs identifiants uniques. |
|||
|
Utilisez FieldSort pour trier les résultats de requête en fonction des valeurs d'une ou plusieurs colonnes. FieldSort convient aux scénarios où vous souhaitez trier les données selon des propriétés telles que le volume des ventes ou le nombre de pages vues. Cette fonctionnalité est couramment utilisée dans des secteurs comme le commerce électronique, les réseaux sociaux et les médias. |
|||
|
Utilisez GeoDistanceSort pour trier les résultats de requête par emplacement géographique. GeoDistanceSort est adapté aux scénarios où vous souhaitez trier les données en fonction de la distance par rapport à un lieu spécifique. Cette fonctionnalité est couramment utilisée dans des secteurs tels que la cartographie et la logistique. Par exemple, vous pouvez trier les restaurants autour d'un lieu en fonction de leur distance par rapport à ce lieu. |
|||
|
Pagination |
Spécifiez une méthode de pagination lors de l'interrogation des données |
Si le nombre de lignes dans la réponse est inférieur à 100 000, utilisez cette méthode pour accéder directement à une page spécifique. |
|
|
Par défaut, l'utilisation d'un jeton permet uniquement de paginer vers l'arrière. Toutefois, vous pouvez mettre en cache et utiliser le jeton précédent pour paginer vers l'avant, car un jeton reste valide pendant toute la durée de la requête. |
Pré-tri d'index
Par défaut, Tablestore trie les données d'un index de recherche selon un ordre de tri prédéfini, appelé pré-tri d'index (IndexSort). Lors de l'interrogation des données, IndexSort détermine l'ordre par défaut des résultats renvoyés.
Lors de la création d'un index de recherche, personnalisez IndexSort. Si vous ne spécifiez pas ce paramètre, l'index utilise par défaut le tri par clé primaire.
Le pré-tri d'index prend uniquement en charge
PrimaryKeySort(tri par clé primaire) etFieldSort(tri par champ).Vous ne pouvez pas utiliser le pré-tri d'index pour un index de recherche contenant des champs de type nested.
Après la création d'un index de recherche, la fonctionnalité de modification dynamique du schéma vous permet de modifier les paramètres
IndexSort.
Spécifier une méthode de tri lors de l'interrogation des données
Le tri ne peut être activé que pour les champs dont le paramètre EnableSortAndAgg est défini sur true.
ScoreSort
ScoreSort
Trie les résultats de requête par score de pertinence, calculé à l'aide de l'algorithme BM25. Cette méthode convient aux scénarios basés sur la pertinence, tels que la recherche en texte intégral.
Si vous souhaitez trier par score de pertinence, spécifiez explicitement
ScoreSort. Sinon, Tablestore trie les résultats selon les paramètresIndexSortde l'index.Lorsque vous utilisez
ScoreSort, les champs de typeFuzzyKeywordne sont pas inclus dans le tri, et le paramètreweightn'a aucun effet sur ces champs.
var searchQuery = new SearchQuery();
searchQuery.Sort = new Sort(new List<ISorter>() { new ScoreSort() });
PrimaryKeySort
// Sort the query results based on the values of the primary key in ascending order.
var searchQuery = new SearchQuery();
searchQuery.Sort = new Sort(new List<ISorter>() { new PrimaryKeySort() });
// Sort the query results based on the values of the primary key in descending order.
var searchQuery = new SearchQuery();
searchQuery.Sort = new Sort(new List<ISorter>() { new PrimaryKeySort(SortOrder.DESC) });
FieldSort
Utilisez FieldSort pour trier les résultats de requête en fonction des valeurs d'une ou plusieurs colonnes spécifiques.
Trier les résultats de requête en fonction des valeurs d'une seule colonne
Utilisez FieldSort pour trier les résultats de requête en fonction des valeurs d'une colonne spécifique.
var searchQuery = new SearchQuery();
var fieldSort = new FieldSort("col", SortOrder.ASC);
searchQuery.Sort = new Sort(new List<ISorter>() { fieldSort });
Trier les résultats de requête en fonction des valeurs de plusieurs colonnes
Vous pouvez également trier les résultats de requête en fonction des valeurs de deux colonnes selon des ordres spécifiques afin de déterminer l'ordre dans lequel les données correspondantes sont renvoyées.
var searchQuery = new SearchQuery();
var col1Sort = new FieldSort("col", SortOrder.ASC);
var col2Sort = new FieldSort("co2", SortOrder.ASC);
searchQuery.Sort = new Sort(new List<ISorter>() { col1Sort, col2Sort });
GeoDistanceSort
var searchQuery = new SearchQuery();
var geoDistanceSort = new GeoDistanceSort("geoCol", new List<string>(){"0","0"});
searchQuery.Sort = new Sort(new List<ISorter>() { geoDistanceSort });
Spécifier une méthode de pagination
Pagination basée sur les paramètres Limit et Offset
var searchQuery = new SearchQuery();
searchQuery.Query = new MatchAllQuery();
searchQuery.Limit = 100;
searchQuery.Offset = 100;
Pagination basée sur des jetons
/// <summary>
/// In this example, a token is used to page the rows in the response and Tablestore reads all data and returns the data in a list.
/// </summary>
/// <param name="otsClient"></param>
public static SearchResponse ReadMoreRowsWithToken(OTSClient otsClient)
{
var searchQuery = new SearchQuery();
searchQuery.Query = new MatchAllQuery();
var request = new SearchRequest(TableName, IndexName, searchQuery);
var response = otsClient.Search(request);
var rows = response.Rows;
while (response.NextToken != null) // If NextToken is null in the response, all data is read.
{
request.SearchQuery.Token = response.NextToken;
response = otsClient.Search(request);
rows.AddRange(response.Rows);
}
return response;
}
FAQ
Références
-
Lorsque vous utilisez un index de recherche pour interroger des données, recourez aux méthodes de requête suivantes : requête term, requête terms, requête match all, requête match, requête match phrase, requête prefix, requête range, requête wildcard, requête Boolean, requête geo, requête nested et requête exists. Utilisez différentes méthodes de requête pour interroger des données selon plusieurs dimensions, en fonction de vos besoins métier.
Triez ou paginez les lignes répondant aux conditions de requête en utilisant les fonctionnalités de tri et de pagination. Pour plus d'informations, consultez la rubrique Tri et pagination.
Utilisez la fonctionnalité de collapse (distinct) pour regrouper l'ensemble des résultats en fonction d'une colonne spécifique. Ainsi, les données du type spécifié n'apparaissent qu'une seule fois dans les résultats de la requête. Pour plus d'informations, consultez la rubrique Collapse (distinct).
Si vous souhaitez analyser les données d'une table de données, utilisez la fonctionnalité d'agrégation de l'opération Search ou exécutez des instructions SQL. Par exemple, vous pouvez obtenir les valeurs minimales et maximales, la somme et le nombre total de lignes. Pour plus d'informations, consultez les rubriques Agrégation et Requête SQL.
Si vous souhaitez obtenir toutes les lignes répondant aux conditions de requête sans avoir besoin de les trier, appelez les opérations ParallelScan et ComputeSplits pour utiliser la fonctionnalité de balayage parallèle. Pour plus d'informations, consultez la rubrique Balayage parallèle.