Cette rubrique explique comment exécuter des requêtes imbriquées pour interroger les données des lignes enfants dans les colonnes de type imbriqué. Vous devez utiliser l'opération NestedQuery pour encapsuler une colonne imbriquée avant de l'interroger. Lors de l'appel à l'opération NestedQuery, spécifiez une sous-requête de n'importe quel type ainsi que le chemin d'accès de la colonne imbriquée.
Prérequis
Initialisez une instance OTSClient. Pour plus d'informations, consultez la section Initialiser une instance OTSClient.
Créez une table de données et insérez-y des données. Pour plus d'informations, consultez les sections Créer des tables de données et Écrire des données.
Créez un index de recherche pour la table de données. Pour plus d'informations, consultez la section Créer des index de recherche.
Paramètres
|
Paramètre |
Description |
|
Path |
Chemin d'accès de la colonne imbriquée. Ce chemin ressemble à une structure arborescente. Par exemple, news.title indique la sous-colonne title située dans la colonne news de type imbriqué. |
|
Query |
Requête appliquée à la sous-colonne de la colonne imbriquée. Cette requête peut être de n'importe quel type. |
|
ScoreMode |
Spécifie quelle valeur est utilisée pour calculer le score lorsque la colonne contient plusieurs valeurs. |
|
TableName |
Nom de la table de données. |
|
IndexName |
Nom de l'index de recherche. |
|
ColumnsToGet |
Indique s'il faut renvoyer toutes les colonnes des lignes correspondant aux conditions de requête. Vous pouvez spécifier les paramètres ReturnAll, Columns et ReturnAllFromIndex. Par défaut,
Définissez |
Exemple
L'exemple de code suivant montre comment interroger les lignes dont la valeur de la sous-colonne nested_1, située dans la colonne col_nested, est « tablestore ». Toutes les colonnes de l'index de recherche sont renvoyées.
/// <summary>
/// Query the rows in which the value of the col1_nested.nested_1 column is "tablestore". In this example, the col1_nested column is a nested column and contains the nested_1 and nested_2 subcolumns.
/// </summary>
/// <param name="otsClient"></param>
public static void NestedQuery(OTSClient otsClient)
{
var searchQuery = new SearchQuery();
// Return the total number of rows that meet the query conditions.
searchQuery.GetTotalCount = true;
var nestedQuery = new NestedQuery();
nestedQuery.Path = "col1_nested"; // Specify the path of the nested column.
TermQuery termQuery = new TermQuery("col1_nested.nested_1",new ColumnValue("tablestore"));// Construct a subquery of for the nested query.
nestedQuery.Query = termQuery;
nestedQuery.ScoreMode = ScoreMode.None;
var request = new SearchRequest(TableName, IndexName, searchQuery);
// You can specify the ColumnsToGet parameter to return the columns that you specify, all columns in the rows that meet the query conditions, or all columns in the search index. If you do not specify this parameter, only the primary key columns are returned.
request.ColumnsToGet = new ColumnsToGet()
{
// Return all columns in the search index.
ReturnAllFromIndex = true
// Return the columns that you specify.
//Columns = new List<string>() { Long_type_col, Text_type_col, Keyword_type_col }
// Return all columns in the rows that meet the query conditions.
//ReturnAll = true
};
var response = otsClient.Search(request);
Console.WriteLine("Total Count:" + response.TotalCount); // Display the total number of rows that meet the query conditions instead of the number of returned rows.
}
FAQ
Références
-
Lorsque vous utilisez un index de recherche pour interroger des données, vous pouvez recourir aux méthodes de requête suivantes : requête par terme, requête par termes, requête MatchAll, requête Match, requête MatchPhrase, requête par préfixe, requête par plage, requête par caractère générique, requête booléenne, requête géographique, requête imbriquée et requête Exists. Vous pouvez combiner différentes méthodes de requête pour interroger vos données selon plusieurs dimensions, en fonction de vos besoins métier.
Vous pouvez trier ou paginer les lignes correspondant aux conditions de requête grâce aux fonctionnalités de tri et de pagination. Pour plus d'informations, consultez la section Tri et pagination.
La fonctionnalité de regroupement (distinct) permet de condenser 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 section Regroupement (distinct).
Si vous souhaitez analyser les données d'une table, vous pouvez utiliser la fonctionnalité d'agrégation de l'opération Search ou exécuter des instructions SQL. Par exemple, vous pouvez obtenir les valeurs minimale et maximale, la somme ainsi que le nombre total de lignes. Pour plus d'informations, consultez les sections Agrégation et Requête SQL.
Si vous souhaitez récupérer toutes les lignes correspondant aux conditions de requête sans avoir besoin de les trier, vous pouvez appeler les opérations ParallelScan et ComputeSplits pour utiliser la fonctionnalité de balayage parallèle. Pour plus d'informations, consultez la section Balayage parallèle.