Une requête de correspondance (match query) avec le SDK Tablestore pour Java recherche dans les champs Text ou Keyword et renvoie les lignes satisfaisant aux conditions de correspondance, accompagnées de scores de pertinence.
Prérequis
Installez le SDK Tablestore pour Java et initialisez le client.
Description de la fonctionnalité
Une requête de correspondance recherche dans les champs Text ou Keyword. Pour plus d'informations sur les types de champs, consultez la rubrique Types de chaînes. Ces deux types de champs présentent des comportements de correspondance différents :
Text: L'analyseur configuré lors de la création de l'index de recherche analyse la valeur du champ et le texte de la requête. À défaut d'analyseur configuré, la tokenisation par mot unique s'applique par défaut. L'opérateurORpar défaut fait correspondre une valeur de champ contenant n'importe quel jeton de la requête. Utilisez l'opérateurANDpour exiger la correspondance de tous les jetons de la requête ou spécifiez le nombre minimal de jetons devant correspondre.Keyword: Ni la valeur du champ ni le texte de la requête ne sont analysés. Une ligne correspond uniquement si la valeur complète du champ est égale au texte de la requête.
Une requête de correspondance n'exige pas que les jetons correspondants soient adjacents ou dans le même ordre que le texte de la requête. Pour faire correspondre les jetons dans l'ordre, utilisez une requête de correspondance de phrase. Si un champ Text utilise l'analyseur flou et que vous avez besoin d'une recherche floue haute performance, nous recommandons également une requête de correspondance de phrase.
L'exemple suivant interroge les lignes dont le champ description contient le jeton tablestore ou durable et renvoie jusqu'à 10 lignes, le nombre total de lignes correspondantes ainsi que les scores de pertinence.
String tableName = "example_table";
String indexName = "example_index";
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
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);
for (SearchHit hit : response.getSearchHits()) {
System.out.println(hit.getRow());
System.out.println(hit.getScore());
}
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. |
|
indexName (obligatoire) |
String |
Le nom de l'index de recherche. |
|
searchQuery (obligatoire) |
SearchQuery |
La condition de requête et les paramètres de requête courants. |
|
columnsToGet (facultatif) |
SearchRequest.ColumnsToGet |
Les paramètres des colonnes renvoyées. Si vous omettez ce paramètre, 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 pour les champs de routage personnalisés. Omettez ce paramètre si l'index n'utilise pas le routage personnalisé. |
Paramètres de 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 |
|
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 plus de détails sur la configuration, consultez la rubrique Regrouper les résultats de requête. |
|
sort (facultatif) |
Sort |
L'ordre de tri des résultats. Pour plus de détails sur la 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 plus de détails sur la configuration, consultez la rubrique Agrégation. |
|
groupByList (facultatif) |
|
Les paramètres de regroupement. Pour plus de détails sur la configuration, consultez la rubrique Agrégation. |
|
token (facultatif) |
byte[] |
Le jeton de pagination. Définissez ce paramètre sur la valeur |
Condition de correspondance
request.searchQuery.query est un objet MatchQuery qui contient les paramètres suivants.
|
Nom |
Type |
Description |
|
fieldName (obligatoire) |
String |
Le nom du champ d'index |
|
text (obligatoire) |
String |
Le texte de la requête. Pour un champ |
|
operator (facultatif) |
QueryOperator |
L'opérateur utilisé pour combiner les jetons de requête. |
|
minShouldMatch (facultatif) |
String ou int |
Le nombre minimal de jetons de requête devant correspondre lorsque |
|
weight (facultatif) |
float |
Le poids de la requête. La valeur par défaut est |
setMinimumShouldMatch(Integer) est obsolète. Utilisez setMinShouldMatch(int) ou setMinShouldMatch(String).
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. 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
Réponse de la requête
La méthode search renvoie un objet SearchResponse. Le tableau suivant décrit les principaux champs.
|
Nom |
Type |
Description |
|
totalCount |
long |
Le nombre de lignes correspondantes. Appelez |
|
rows |
|
Les lignes renvoyées dans la réponse actuelle. 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 |
Résultat de requête (Hit)
response.searchHits[] est un objet SearchHit qui contient les principaux champs suivants.
|
Nom |
Type |
Description |
|
row |
Row |
La ligne correspondante. Appelez |
|
score |
Double |
Le score de pertinence. Appelez |
|
highlightResultItem |
HighlightResultItem |
Le résultat de résumé et de mise en surbrillance. Appelez |
Exemples
Correspondre à tous les jetons de la requête
Définissez operator sur AND pour faire correspondre une ligne uniquement si la valeur du champ contient tous les jetons de la requête.
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
matchQuery.setOperator(QueryOperator.AND);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
Définir le nombre minimal de jetons correspondants
Lorsque l'opérateur OR est utilisé, définissez minShouldMatch pour spécifier le nombre minimal de jetons de requête devant correspondre. L'exemple suivant exige au moins deux jetons correspondants.
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable cloud");
matchQuery.setOperator(QueryOperator.OR);
matchQuery.setMinShouldMatch(2);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);