Les requêtes avec caractères génériques du SDK Tablestore pour Node.js utilisent les caractères * et ? pour construire des motifs de correspondance et interroger les données correspondantes dans les champs Keyword, Text ou FuzzyKeyword.
Si le motif de requête est *word* (équivalent à WHERE field_a LIKE '%word%' en SQL), privilégiez la fonctionnalité de requêtes avec caractères génériques basées sur des jetons pour de meilleures performances. Les performances ne se dégradent pas avec l'augmentation du volume de données.
Pour effectuer une recherche NOT LIKE, utilisez une WildcardQuery avec le paramètre mustNotQueries d'une BoolQuery.
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 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 de départ de la requête actuelle. |
|
limit |
Nombre maximal de lignes à renvoyer par la requête actuelle. |
|
queryType |
Type de requête. Définissez ce paramètre sur TableStore.QueryType.WILDCARD_QUERY. |
|
fieldName |
Nom de la colonne à interroger. |
|
value |
Chaîne contenant des caractères génériques. La longueur maximale est de 32 caractères. |
|
getTotalCount |
Indique s'il faut renvoyer le nombre total de lignes correspondant aux conditions de requête. Par défaut, la valeur est false, ce qui signifie que le nombre total n'est pas renvoyé. La définition du paramètre getTotalCount sur true dégrade les performances de la requête. |
|
columnToGet |
Indique s'il faut renvoyer toutes les colonnes de chaque ligne répondant aux conditions de requête. Configurez returnType et returnNames pour ce paramètre.
|
Exemples
L'exemple de code suivant recherche les lignes dont la valeur de Col_Keyword correspond à la chaîne « table*e ».
/**
* Search the table for rows in which the value of Col_Keyword matches "table*e".
*/
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 returning specific data, you can set limit to 0. This way, Tablestore returns the number of rows that meet the query conditions without specific data from the table.
query: { // Set the query type to TableStore.QueryType.WILDCARD_QUERY.
queryType: TableStore.QueryType.WILDCARD_QUERY,
query: {
fieldName: "Col_Keyword",
value: "table*e" // Specify a string that contains one or more wildcard characters in a wildcard query.
}
},
getTotalCount: true // Specify whether to return the total number of rows that meet the query conditions. The default value of this parameter is false, which indicates that the total number of rows that meet the query conditions is not returned.
},
columnToGet: { // Specify the columns that you want to return. You can set the parameter to RETURN_SPECIFIED to return 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
[Que faire si l'exception « length of field value is longer than 32 for the [WILDCARD_QUERY] query » se produit lors de l'interrogation des données à l'aide d'une requête avec caractères génériques ?](t1914484.xdita#)Que faire si l'erreur « length of field value is longer than 32 for the [WILDCARD_QUERY] query » survient lors de l'utilisation d'une requête avec caractères génériques ?
Que faire si aucune donnée n'est trouvée lors de l'appel de l'opération Search ?
Références
-
Les index de recherche prennent en charge les types de requête suivants : 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 avec caractères génériques, requête booléenne, requête geo, requête nested, requête vector et requête exists. Sélectionnez le type de requête adapté à vos besoins métier.
Pour trier ou paginer les lignes répondant aux conditions de requête, utilisez la fonctionnalité de tri et de pagination. Pour plus d'informations, consultez la rubrique Tri et pagination.
Pour regrouper l'ensemble de résultats selon 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. Pour plus d'informations, consultez la rubrique Regroupement (distinct).
Pour analyser les données d'une table de données (valeurs extrêmes, somme, nombre total de lignes, etc.), effectuez des opérations d'agrégation ou exécutez des instructions SQL. Pour plus d'informations, consultez les rubriques Agrégation et Requête SQL.
Pour obtenir rapidement toutes les lignes répondant aux conditions de requête sans tri, appelez les opérations ParallelScan et ComputeSplits afin d'utiliser la fonctionnalité d'analyse parallèle. Pour plus d'informations, consultez la rubrique Analyse parallèle.