La requête de correspondance permet d'interroger les données d'une table en fonction de correspondances approximatives. Tablestore tokenize les valeurs du champ TEXT et le mot-clé de recherche selon le type d'analyseur spécifié, puis exécute la requête sur la base des jetons générés. Nous vous recommandons d'utiliser la requête de phrase de correspondance pour les champs TEXT afin de garantir des performances élevées lors des recherches floues.
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 écrivez-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 un index de recherche.
Paramètres
|
Paramètre |
Description |
|
tableName |
Nom de la table de données. |
|
indexName |
Nom de l'index de recherche. |
|
offset |
Position à partir de laquelle la requête actuelle commence. |
|
limit |
Nombre maximal de lignes que la requête actuelle doit renvoyer. Pour interroger uniquement le nombre de lignes correspondant aux conditions de requête sans récupérer les données spécifiques, définissez le paramètre limit sur 0. |
|
queryType |
Type de requête. Pour utiliser une requête de correspondance, définissez ce paramètre sur TableStore.QueryType.MATCH_QUERY. |
|
fieldName |
Nom du champ à faire correspondre. La requête de correspondance s'applique aux champs TEXT. |
|
text |
Mot-clé utilisé pour faire correspondre la valeur du champ lors d'une requête de correspondance. Si le champ à faire correspondre est un champ TEXT, le mot-clé est tokenisé en plusieurs jetons selon le type d'analyseur spécifié lors de la création de l'index de recherche. Si vous ne spécifiez pas le type d'analyseur lors de la création de l'index de recherche, une tokenisation par mot unique est appliquée. Par exemple, si le champ à faire correspondre est un champ TEXT, que vous définissez le type d'analyseur sur une tokenisation par mot unique et que vous utilisez « this is » comme mot-clé de recherche, vous pouvez obtenir des résultats tels que « ..., this is tablestore », « is this tablestore », « tablestore is cool », « this » et « is ». |
|
operator |
Opérateur logique. Par défaut, l'opérateur OR est utilisé : une ligne satisfait aux conditions de requête lorsque la valeur du champ contient au moins le nombre minimal de jetons correspondants. Si vous définissez le paramètre operator sur AND, la ligne satisfait aux conditions de requête uniquement si la valeur du champ contient tous les jetons correspondants. |
|
minimumShouldMatch |
Nombre minimal de jetons correspondants contenus dans la valeur du champ. Une ligne est renvoyée uniquement si la valeur du champ spécifié par le paramètre fieldName dans cette ligne contient au moins le nombre minimal de jetons correspondants. Remarque
Vous devez utiliser le paramètre minimumShouldMatch conjointement avec l'opérateur logique OR. |
|
getTotalCount |
Indique s'il faut renvoyer le nombre total de lignes satisfaisant aux conditions de requête. Valeur par défaut : false. Si vous définissez ce paramètre sur true, les performances de la requête sont réduites. |
|
columnToGet |
Indique s'il faut renvoyer toutes les colonnes de chaque ligne satisfaisant aux conditions de requête. Vous pouvez configurer returnType et returnNames pour ce paramètre.
|
Exemples
L'exemple de code suivant montre comment interroger les lignes dont la valeur de la colonne Col_Keyword correspond à « hangzhou » dans une table :
/**
* Query the rows in which the value of the Col_Keyword column matches "hangzhou" in a table. Tablestore returns the total number of rows that meet the query conditions and the specific data of some of these rows.
*/
client.search({
tableName: TABLE_NAME,
indexName: INDEX_NAME,
searchQuery: {
offset: 0,
limit: 10, // To query only the number of rows that meet the query conditions without specific data, set the limit parameter to 0.
query: { // Set the query type to MatchQuery.
queryType: TableStore.QueryType.MATCH_QUERY,
query: {
fieldName: "Col_Keyword", // Specify the name of the field that you want to match.
text: "hangzhou" // Specify the keyword that is used to match the value of the field.
}
},
getTotalCount: true // Specify whether to return the total number of rows that meet the query conditions. Default value: false.
},
columnToGet: { // Specify the columns that you want to return. You can set the parameter to RETURN_SPECIFIED to return the specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns.
returnType: TableStore.ColumnReturnType.RETURN_ALL
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});
FAQ
Références
-
Les index de recherche prennent en charge les types de requêtes suivants : requête term, requête terms, requête match all, requête de correspondance, requête de phrase de correspondance, requête prefix, requête range, requête wildcard, requête Boolean, requête geo, requête nested, requête vector et requête exists. Sélectionnez un type de requête adapté à vos besoins métier.
Pour trier ou paginer les lignes satisfaisant aux conditions de requête, utilisez la fonctionnalité de tri et de pagination. Pour plus d'informations, consultez la section Tri et pagination.
Pour regrouper l'ensemble des résultats en fonction d'une colonne spécifique, utilisez la fonctionnalité de regroupement (distinct). 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).
Pour analyser les données d'une table de données, par exemple pour obtenir les valeurs extrêmes, la somme et le nombre total de lignes, effectuez des opérations d'agrégation ou exécutez des instructions SQL. Pour plus d'informations, consultez les sections Agrégation et Requête SQL.
Pour obtenir rapidement toutes les lignes satisfaisant aux conditions de requête sans avoir besoin de les trier, appelez les opérations ParallelScan et ComputeSplits pour utiliser la fonctionnalité d'analyse parallèle. Pour plus d'informations, consultez la section Analyse parallèle.