Tous les produits
Search
Centre de documentation

Tablestore:Recherche vectorielle

Dernière mise à jour :Aug 20, 2026

La recherche vectorielle avec le SDK Tablestore pour Java renvoie les données les plus proches d'un index de recherche en se basant sur la similarité vectorielle. Elle prend en charge les seuils de score, le nombre de candidats et les filtres non vectoriels.

Prérequis

  • Installez le SDK Tablestore pour Java et initialisez le client. La recherche vectorielle nécessite la version 5.17.0 ou ultérieure.

  • Pour configurer minScore ou numCandidates, utilisez la version 5.17.5 ou ultérieure.

Description de la fonctionnalité

La recherche vectorielle effectue une recherche des voisins les plus proches (ANN) entre un vecteur de requête et les vecteurs d'un champ Vector. Tablestore attribue un score aux résultats selon la métrique de distance configurée lors de la création de l'index de recherche et renvoie les données les plus proches. Contrairement aux requêtes qui filtrent sur des valeurs de champ, la recherche vectorielle détermine la similarité à partir de la distance entre les vecteurs.

Appelez search et définissez query sur KnnVectorQuery.

SearchResponse search(SearchRequest request)

L'exemple suivant récupère les trois vecteurs du champ embedding les plus proches de [1.0, 0.0, 0.0, 0.0]. Les résultats sont triés par score décroissant.

String tableName = "example_table";
String indexName = "example_index";
KnnVectorQuery query = new KnnVectorQuery();
query.setFieldName("embedding");
query.setTopK(3);
query.setFloat32QueryVector(new float[]{1.0f, 0.0f, 0.0f, 0.0f});

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(query);
searchQuery.setLimit(3);
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));

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.getScore() + ": " + hit.getRow());
}
Remarque

Des limites s'appliquent au nombre et aux dimensions des champs vectoriels ainsi qu'à topK. Pour plus de détails, consultez les Limites des index de recherche.

Paramètres

Requête de recherche

request est un objet SearchRequest contenant les paramètres suivants.

Nom

Type

Description

tableName (obligatoire)

String

Nom de la table.

indexName (obligatoire)

String

Nom de l'index de recherche.

searchQuery (obligatoire)

SearchQuery

Condition de requête et configurations courantes.

columnsToGet (facultatif)

SearchRequest.ColumnsToGet

Configuration des colonnes renvoyées. Si ce paramètre n'est pas défini, seules les colonnes de clé primaire sont renvoyées.

timeoutInMillisecond (facultatif)

int

Délai d'expiration de la requête en millisecondes. Valeur par défaut : -1 (aucun délai d'expiration distinct configuré).

routingValues (facultatif)

List<PrimaryKey>

Valeurs de clé primaire des champs de routage personnalisés. Laissez ce paramètre vide si le routage personnalisé n'est pas configuré.

Configuration de la requête

request.searchQuery est un objet SearchQuery contenant les paramètres suivants.

Nom

Type

Description

query (obligatoire)

Query

Condition de requête. Définissez ce paramètre sur KnnVectorQuery pour la recherche vectorielle.

offset (facultatif)

Integer

Position de départ de la requête.

limit (facultatif)

Integer

Nombre maximal de lignes à renvoyer. Si ce paramètre est défini sur 0, aucune ligne n'est renvoyée.

highlight (facultatif)

Highlight

Configurations de résumé et de mise en surbrillance. Les champs vectoriels ne prennent pas en charge ces fonctionnalités.

collapse (facultatif)

Collapse

Configuration de réduction pour dédupliquer les résultats selon une colonne spécifiée.

sort (facultatif)

Sort

Ordre de tri des résultats. Utilisez ScoreSort pour trier par score.

trackTotalCount (facultatif)

int

Nombre maximal de lignes correspondantes à compter. Valeur par défaut : TRACK_TOTAL_COUNT_DISABLED (comptage désactivé). Définissez ce paramètre sur TRACK_TOTAL_COUNT pour compter toutes les lignes correspondantes. Une valeur plus faible améliore les performances de la requête.

filter (facultatif)

SearchFilter

Filtre appliqué aux résultats de query.

aggregationList (facultatif)

List<Aggregation>

Configurations d'agrégation.

groupByList (facultatif)

List<GroupBy>

Configurations de regroupement.

token (facultatif)

byte[]

Jeton de pagination. Définissez ce paramètre sur le nextToken de la réponse précédente pour récupérer davantage de données. Chaque partition d'index côté serveur renvoie ses propres valeurs topK les plus proches, fusionnées au niveau d'un nœud de coordination. Lors de la pagination avec token, le nombre cumulé de lignes renvoyées dépend donc du nombre de partitions d'index côté serveur.

Condition de requête vectorielle

request.searchQuery.query est un objet KnnVectorQuery contenant les paramètres suivants.

Nom

Type

Description

fieldName (obligatoire)

String

Nom du champ vectoriel. Le champ doit être de type Vector et la dimension du vecteur de requête doit correspondre à celle configurée lors de la création de l'index de recherche.

topK (obligatoire)

Integer

Nombre de vecteurs les plus proches à récupérer. Maximum : 1000. Une valeur plus élevée renvoie plus de candidats et peut améliorer le rappel, mais augmente également la latence et le coût de la requête.

float32QueryVector (obligatoire)

float[]

Vecteur de requête Float32 utilisé pour calculer la similarité. La longueur du tableau doit correspondre à la dimension du champ vectoriel.

filter (facultatif)

Query

Conditions de requête non vectorielles que les résultats de la recherche vectorielle doivent également respecter. Vous pouvez combiner plusieurs objets Query non vectoriels.

weight (facultatif)

Float

Poids de pertinence de la requête vectorielle. La valeur doit être supérieure ou égale à 0. Valeur par défaut : 1.0. Une valeur plus élevée accroît l'influence du score de la requête vectorielle sur le score de pertinence final sans modifier les lignes correspondantes.

minScore (facultatif)

Float

Seuil de score minimum. La valeur doit être supérieure ou égale à 0. Valeur par défaut : 0. Seules les données dont le score est strictement supérieur à cette valeur sont renvoyées.

numCandidates (facultatif)

Integer

Nombre de candidats consultés dans chaque partition d'index lors du calcul des voisins les plus proches. Valeurs valides : [topK, 1000]. Une valeur plus élevée peut améliorer le rappel, mais augmente également le temps de requête.

Colonnes renvoyées

request.columnsToGet est un objet SearchRequest.ColumnsToGet contenant les paramètres suivants.

Nom

Type

Description

columns (facultatif)

List<String>

Colonnes d'attribut à renvoyer. Configurez ce paramètre uniquement si returnAll et returnAllFromIndex sont tous deux définis sur false. Si ce paramètre n'est pas configuré, seules les colonnes de clé primaire sont renvoyées.

returnAll (facultatif)

boolean

Indique s'il faut renvoyer toutes les colonnes d'attribut de la table. Valeur par défaut : false.

returnAllFromIndex (facultatif)

boolean

Indique s'il faut renvoyer toutes les colonnes d'attribut indexées. Valeur par défaut : false. Ce paramètre et returnAll ne peuvent pas être tous deux définis sur true.

Réponse

Réponse de recherche

search renvoie un objet SearchResponse. Le tableau suivant décrit les champs principaux.

Nom

Type

Description

totalCount

long

Nombre de lignes correspondantes. Appelez getTotalCount() pour obtenir la valeur. La valeur renvoyée dépend de trackTotalCount.

rows

List<Row>

Lignes renvoyées par cette requête. Appelez getRows() pour obtenir la valeur. Le nombre de lignes renvoyées ne dépasse pas limit.

searchHits

List<SearchHit>

Résultats de la requête. Appelez getSearchHits() pour obtenir les lignes et leurs scores.

nextToken

byte[]

Jeton pour la page suivante. Appelez getNextToken() pour obtenir la valeur. Si la valeur n'est pas null, transmettez-la en tant que token dans la requête suivante pour récupérer davantage de données.

isAllSuccess

boolean

Indique si toutes les partitions d'index ont été interrogées. Appelez isAllSuccess() pour obtenir la valeur. Si ce champ est false, la réponse contient des résultats partiels et totalCount peut être inférieur au nombre réel de lignes correspondantes.

Résultat de recherche

Chaque élément de response.searchHits[] est un objet SearchHit contenant les champs principaux suivants.

Nom

Type

Description

row

Row

Ligne correspondante. Appelez getRow() pour obtenir la valeur.

score

Double

Score de la requête vectorielle. Appelez getScore() pour obtenir la valeur. La métrique de distance et weight influencent cette valeur.

Exemples

Filtrer par conditions non vectorielles et un score minimum

Utilisez filter pour exiger que les voisins les plus proches respectent les conditions de requête non vectorielles, et minScore pour exclure les données dont le score n'est pas supérieur au seuil. L'exemple suivant renvoie uniquement les données où category est book, price est inférieur à 4 et le score vectoriel est supérieur à 0.6.

KnnVectorQuery filteredQuery = new KnnVectorQuery();
filteredQuery.setFieldName("embedding");
filteredQuery.setTopK(10);
filteredQuery.setFloat32QueryVector(
        new float[]{1.0f, 0.0f, 0.0f, 0.0f});
filteredQuery.setMinScore(0.6f);
filteredQuery.setFilter(QueryBuilders.bool()
        .must(QueryBuilders.term("category", "book"))
        .must(QueryBuilders.range("price").lessThan(4)));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(filteredQuery);
searchQuery.setLimit(10);

Ajuster le nombre de candidats

Définissez numCandidates pour élargir l'ensemble de candidats consulté dans chaque partition d'index lors du calcul des voisins les plus proches. L'exemple suivant récupère les trois vecteurs les plus proches parmi quatre candidats.

KnnVectorQuery candidateQuery = new KnnVectorQuery();
candidateQuery.setFieldName("embedding");
candidateQuery.setTopK(3);
candidateQuery.setFloat32QueryVector(
        new float[]{1.0f, 0.0f, 0.0f, 0.0f});
candidateQuery.setNumCandidates(4);

SearchQuery candidateSearchQuery = new SearchQuery();
candidateSearchQuery.setQuery(candidateQuery);
candidateSearchQuery.setLimit(3);

Rubriques connexes