Une requête avec caractères génériques utilisant le SDK Tablestore pour Java exploite les motifs * et ? pour faire correspondre des données dans les champs Keyword, Text ou FuzzyKeyword.
Prérequis
Installez le SDK Tablestore pour Java et initialisez un client.
Description de la fonctionnalité
Une requête avec caractères génériques compare un champ indexé à un motif contenant des caractères génériques. Sa sémantique de correspondance est similaire à l'opérateur SQL LIKE, mais le motif utilise * et ? comme caractères génériques. Pour un champ Keyword ou FuzzyKeyword, le motif est comparé à la valeur complète du champ. Pour un champ Text, le motif est comparé à chaque jeton généré à partir de la valeur du champ, sans que le motif lui-même ne soit tokenisé. Pour plus d'informations sur les types de champs pris en charge, consultez la rubrique Types de chaînes. La correspondance respecte la casse.
Un motif peut commencer par un caractère générique et prend en charge les caractères suivants :
*correspond à zéro ou plusieurs caractères.?correspond à n'importe quel caractère unique.
Par exemple, table*e correspond à tablestore. Le motif hang*u correspond à hangu et à hangzhou. Le motif hang?u correspond à hangxu mais pas à hangu.
Pour rechercher des valeurs contenant une chaîne spécifique, comme avec le motif *word* (équivalent à SQL WHERE field_a LIKE '%word%'), utilisez une requête avec caractères génériques basée sur les jetons. Cette approche garantit que les performances de la requête ne se dégradent pas avec l'augmentation du volume de données.
Pour exclure les données correspondant à un motif, ajoutez l'objet WildcardQuery à BoolQuery.mustNotQueries. Cette configuration équivaut à l'opérateur SQL NOT LIKE. Pour savoir comment configurer BoolQuery, consultez la rubrique Requête booléenne.
Définissez le type de requête sur WildcardQuery lors de l'appel à search. Utilisez SearchQuery pour configurer la limite de résultats, le suivi du nombre total et d'autres paramètres généraux de la requête.
SearchResponse search(SearchRequest request)
L'exemple suivant interroge les valeurs Keyword du champ product_name qui correspondent au motif table*e. La requête renvoie jusqu'à 10 lignes ainsi que le nombre total de correspondances.
String tableName = "example_table";
String indexName = "example_index";
WildcardQuery wildcardQuery = new WildcardQuery();
wildcardQuery.setFieldName("product_name");
wildcardQuery.setValue("table*e");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(wildcardQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());
Paramètres
Requête de recherche
request est un objet SearchRequest qui contient les paramètres suivants.
|
Nom |
Type |
Description |
|
tableName (obligatoire) |
String |
Le nom de la table de données. |
|
indexName (obligatoire) |
String |
Le nom de l'index de recherche. |
|
searchQuery (obligatoire) |
SearchQuery |
La condition de requête et les paramètres généraux de la requête. |
|
columnsToGet (facultatif) |
SearchRequest.ColumnsToGet |
Les colonnes à renvoyer. Si ce paramètre n'est pas configuré, seules les colonnes de clé primaire sont renvoyées. |
|
timeoutInMillisecond (facultatif) |
int |
Le délai d'expiration de la requête au niveau de la demande, en millisecondes. La valeur par défaut est |
|
routingValues (facultatif) |
|
Les valeurs de clé primaire correspondant aux champs de routage personnalisés. Laissez ce paramètre non défini si le routage personnalisé n'est pas configuré. |
Paramètres de la requête
request.searchQuery est un objet SearchQuery qui contient les paramètres suivants.
|
Nom |
Type |
Description |
|
query (obligatoire) |
Query |
La condition de requête. Définissez ce paramètre sur un objet |
|
offset (facultatif) |
Integer |
La position de départ de la requête. |
|
limit (facultatif) |
Integer |
Le nombre maximal de lignes à renvoyer. Définissez ce paramètre sur |
|
highlight (facultatif) |
Highlight |
Les paramètres de résumé et de mise en surbrillance pour les champs |
|
collapse (facultatif) |
Collapse |
Les paramètres de regroupement (collapse), qui dédupliquent les résultats selon un champ spécifié. Pour les détails de configuration, consultez la rubrique Regrouper les résultats de requête. |
|
sort (facultatif) |
Sort |
L'ordre de tri des résultats. Pour les détails de configuration, consultez la rubrique Trier et paginer les résultats. |
|
trackTotalCount (facultatif) |
int |
Le nombre maximal attendu de lignes correspondantes à compter. La valeur par défaut est |
|
filter (facultatif) |
SearchFilter |
Un filtre appliqué aux résultats de |
|
aggregationList (facultatif) |
|
Les paramètres d'agrégation. Pour les détails de configuration, consultez la rubrique Agrégation. |
|
groupByList (facultatif) |
|
Les paramètres de regroupement. Pour les détails de configuration, consultez la rubrique Agrégation. |
|
token (facultatif) |
byte[] |
Le jeton de pagination. Définissez ce paramètre sur la valeur |
Condition de requête
request.searchQuery.query est un objet WildcardQuery qui contient les paramètres suivants.
|
Nom |
Type |
Description |
|
fieldName (obligatoire) |
String |
Le nom du champ |
|
value (obligatoire) |
String |
Un motif de requête contenant des caractères génériques. La longueur maximale est de 32 caractères et la correspondance respecte la casse. Pour un champ |
|
weight (facultatif) |
float |
Le poids de pertinence de la condition de requête. La valeur doit être un nombre à virgule flottante positif. Une valeur plus élevée accroît la contribution de la condition de requête au score de pertinence BM25. Ce paramètre n'affecte ni la correspondance ni le nombre de lignes renvoyées. Il influence l'ordre des résultats uniquement lorsque |
Colonnes renvoyées
request.columnsToGet est un objet SearchRequest.ColumnsToGet qui contient les paramètres suivants.
|
Nom |
Type |
Description |
|
columns (facultatif) |
|
Les colonnes d'attribut à renvoyer. Définissez ce paramètre uniquement si |
|
returnAll (facultatif) |
boolean |
Indique s'il faut renvoyer toutes les colonnes d'attribut de la table de données. La valeur par défaut est |
|
returnAllFromIndex (facultatif) |
boolean |
Indique s'il faut renvoyer toutes les colonnes d'attribut indexées. La valeur par défaut est |
Valeurs de retour
search renvoie un objet SearchResponse. Le tableau suivant décrit les champs principaux.
|
Nom |
Type |
Description |
|
totalCount |
long |
Le nombre de lignes correspondantes. Appelez |
|
rows |
|
Les lignes renvoyées par cette requête. Appelez |
|
searchHits |
|
Les résultats de la requête (hits). Appelez |
|
nextToken |
byte[] |
Le jeton de la page suivante. Appelez |
|
isAllSuccess |
boolean |
Indique si toutes les partitions d'index ont été interrogées avec succès. Appelez |