Une requête booléenne se compose d'une ou plusieurs sous-requêtes. Tablestore renvoie les lignes qui satisfont aux conditions spécifiées dans les sous-requêtes. Une sous-requête peut être de n'importe quel type, y compris une requête booléenne.
Prérequis
Initialisez une instance OTSClient. Pour plus d'informations, consultez la rubrique Initialiser une instance OTSClient.
Créez une table de données et écrivez-y des données. Pour plus d'informations, consultez les rubriques 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 rubrique Créer des index de recherche.
Paramètres
|
Paramètre |
Description |
|
MustQueries |
Liste des conditions de sous-requête. Seules les lignes satisfaisant à toutes les conditions de sous-requête sont renvoyées. Ce paramètre équivaut à l'opérateur AND. |
|
MustNotQueries |
Liste des conditions de sous-requête. Seules les lignes ne satisfaisant à aucune des conditions de sous-requête sont renvoyées. Ce paramètre équivaut à l'opérateur NOT. |
|
FilterQueries |
Liste des conditions de sous-requête. Seules les lignes satisfaisant à tous les filtres sont renvoyées. Un filtre est similaire à une requête, sauf qu'aucun score de pertinence n'est calculé en fonction du nombre de sous-filtres auxquels une ligne répond. |
|
ShouldQueries |
Liste des conditions de sous-requête. Il n'est pas nécessaire que toutes les conditions de sous-requête soient satisfaites pour que les résultats de la requête soient renvoyés. Ce paramètre équivaut à l'opérateur OR. Seules les lignes satisfaisant au nombre minimal de conditions de sous-requête spécifié par le paramètre ShouldQueries sont renvoyées. Un score de pertinence global plus élevé indique que davantage de conditions de sous-requête spécifiées par le paramètre ShouldQueries sont satisfaites. |
|
MinimumShouldMatch |
Nombre minimal de conditions de sous-requête spécifiées par le paramètre ShouldQueries que les lignes renvoyées doivent satisfaire. Si aucune autre condition de sous-requête n'est spécifiée en dehors de celles définies par le paramètre ShouldQueries, la valeur par défaut du paramètre MinimumShouldMatch est 1. Si d'autres conditions de sous-requête sont spécifiées, telles que celles définies par les paramètres MustQueries, MustNotQueries ou FilterQueries, la valeur par défaut du paramètre MinimumShouldMatch est 0. |
|
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 satisfaisant 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 effectuer une requête booléenne composée de sous-requêtes booléennes. Dans cet exemple, la requête recherche les lignes dont la valeur de la colonne Keyword_type_col est « SearchIndex » ou « TableStore ». Toutes les colonnes de l'index de recherche sont renvoyées.
/// <summary>
/// A Boolean query contains one or more subqueries. Each subquery has its own type.
/// MustQueries: The rows must meet all subquery conditions.
/// ShouldQueries: More than one condition is specified by the ShouldQueries parameter. If a row meets at least one condition, the row meets the query conditions.
/// MustNotQueries: The rows must not meet the conditions.
/// MinimumShouldMatch: The rows must meet the minimum number of conditions.
/// </summary>
/// <param name="otsClient"></param>
public static void BoolQuery(OTSClient otsClient)
{
Console.WriteLine("\n Start bool query...");
var searchQuery = new SearchQuery();
// Return the total number of rows that meet the query conditions.
searchQuery.GetTotalCount = true;
var boolQuery = new BoolQuery();
var shouldQuerys = new List<IQuery>();
shouldQuerys.Add(new TermQuery(Keyword_type_col, new ColumnValue("SearchIndex")));
shouldQuerys.Add(new TermQuery(Keyword_type_col, new ColumnValue("TableStore")));
boolQuery.ShouldQueries = shouldQuerys;
boolQuery.MinimumShouldMatch = 1;
searchQuery.Query = boolQuery;
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.
foreach (var row in response.Rows)
{
PrintRow(row);
}
}
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 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 booléenne, requête geo, requête nested et requête exists. Vous pouvez utiliser différentes méthodes de requête pour interroger des données selon plusieurs dimensions en fonction de vos besoins métier.
Vous pouvez trier ou paginer les lignes satisfaisant aux conditions de requête à l'aide des fonctionnalités de tri et de pagination. Pour plus d'informations, consultez la rubrique Tri et pagination.
Vous pouvez utiliser la fonctionnalité de regroupement (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 Regroupement (distinct).
Si vous souhaitez analyser les données d'une table de données, 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 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 satisfaisant aux conditions de requête sans avoir besoin de les trier, vous pouvez appeler les opérations ParallelScan et ComputeSplits pour utiliser la fonctionnalité d'analyse parallèle. Pour plus d'informations, consultez la rubrique Analyse parallèle.