Todos los productos
Search
Centro de documentos

Tablestore:Vector search

Última actualización: Sep 03, 2026

La búsqueda vectorial con el Tablestore SDK for Java devuelve los datos más cercanos en un índice de búsqueda según la similitud de vectores y admite umbrales de puntuación, recuentos de candidatos y filtros no vectoriales.

Requisitos previos

  • Instale Tablestore SDK for Java e inicialice el cliente. La búsqueda vectorial requiere la versión 5.17.0 o posterior.

  • Para configurar minScore o numCandidates, utilice la versión 5.17.5 o posterior.

Descripción de la función

La búsqueda vectorial realiza una búsqueda de vecinos más cercanos aproximada (ANN) entre un vector de consulta y los vectores de un campo Vector. Tablestore puntúa los resultados con la métrica de distancia configurada al crear el índice de búsqueda y devuelve los datos más cercanos. A diferencia de las consultas que coinciden con valores de campo, la búsqueda vectorial determina la similitud a partir de la distancia entre vectores.

Llame a search y establezca query como KnnVectorQuery.

SearchResponse search(SearchRequest request)

El siguiente ejemplo recupera los tres vectores del campo embedding más cercanos a [1.0, 0.0, 0.0, 0.0]. Los resultados se ordenan por puntuación en orden descendente.

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());
}
Nota

Existen límites para el número y las dimensiones de los campos vectoriales, así como para topK. Para obtener más información, consulte Search index limits.

Parámetros

Solicitud de búsqueda

request es un objeto SearchRequest que contiene los siguientes parámetros.

Nombre

Tipo

Descripción

tableName (obligatorio)

String

El nombre de la tabla.

indexName (obligatorio)

String

El nombre del índice de búsqueda.

searchQuery (obligatorio)

SearchQuery

La condición de consulta y las configuraciones comunes de consulta.

columnsToGet (opcional)

SearchRequest.ColumnsToGet

Las configuraciones de columnas devueltas. Si no se configura este parámetro, solo se devuelven las columnas de clave principal.

timeoutInMillisecond (opcional)

int

El tiempo de espera de la consulta a nivel de solicitud, en milisegundos. Valor predeterminado: -1, que no establece un tiempo de espera de consulta independiente.

routingValues (opcional)

List<PrimaryKey>

Los valores de clave principal de los campos de enrutamiento personalizados. No configure este parámetro si no hay enrutamiento personalizado.

Configuración de consulta

request.searchQuery es un objeto SearchQuery que contiene los siguientes parámetros.

Nombre

Tipo

Descripción

query (obligatorio)

Query

La condición de consulta. Establezca este parámetro como KnnVectorQuery para realizar una búsqueda vectorial.

offset (opcional)

Integer

La posición desde la cual comienza la consulta.

limit (opcional)

Integer

El número máximo de filas que se devolverán. Si este parámetro se establece en 0, no se devuelve ninguna fila.

highlight (opcional)

Highlight

Las configuraciones de resumen y resaltado. Los campos vectoriales no admiten resumen ni resaltado.

collapse (opcional)

Collapse

La configuración de colapso para deduplicar resultados según una columna especificada.

sort (opcional)

Sort

El orden de clasificación de los resultados. Utilice ScoreSort para ordenar por puntuación.

trackTotalCount (opcional)

int

El número máximo de filas coincidentes que se contarán. Valor predeterminado: TRACK_TOTAL_COUNT_DISABLED, que deshabilita el conteo. Establezca este parámetro en TRACK_TOTAL_COUNT para contar todas las filas coincidentes. Un valor menor mejora el rendimiento de la consulta.

filter (opcional)

SearchFilter

Un filtro aplicado a los resultados de query.

aggregationList (opcional)

List<Aggregation>

Las configuraciones de agregación.

groupByList (opcional)

List<GroupBy>

Las configuraciones de agrupación.

token (opcional)

byte[]

El token de paginación. Establezca este parámetro con el valor de nextToken de la respuesta anterior para recuperar más datos. Cada partición de índice del lado del servidor devuelve sus propios topK valores más cercanos, que se fusionan en un nodo coordinador. Por lo tanto, cuando pagina con token, el número acumulado de filas devueltas depende de la cantidad de particiones de índice del lado del servidor.

Condición de consulta vectorial

request.searchQuery.query es un objeto KnnVectorQuery que contiene los siguientes parámetros.

Nombre

Tipo

Descripción

fieldName (obligatorio)

String

El nombre del campo vectorial. El campo debe ser de tipo Vector y la dimensión del vector de consulta debe coincidir con la dimensión configurada al created the search index.

topK (obligatorio)

Integer

El número de vectores más cercanos que se recuperarán. Máximo: 1000. Un valor mayor devuelve más candidatos y puede mejorar la recuperación, pero también puede aumentar la latencia y el costo de la consulta.

float32QueryVector (obligatorio)

float[]

El vector de consulta Float32 utilizado para calcular la similitud. La longitud del arreglo debe coincidir con la dimensión del campo vectorial.

filter (opcional)

Query

Condiciones de consulta no vectoriales que también deben cumplir los resultados de la búsqueda vectorial. Puede combinar varios objetos Query no vectoriales.

weight (opcional)

Float

El peso de relevancia de la consulta vectorial. El valor debe ser mayor o igual a 0. Valor predeterminado: 1.0. Un valor mayor otorga más influencia a la puntuación de la consulta vectorial sobre la puntuación final de relevancia, sin cambiar qué filas coinciden.

minScore (opcional)

Float

El umbral de puntuación mínima. El valor debe ser mayor o igual a 0. Valor predeterminado: 0. Solo se devuelven los datos con una puntuación estrictamente mayor que este valor.

numCandidates (opcional)

Integer

El número de candidatos consultados en cada partición de índice cuando se calculan los vecinos más cercanos. Valores válidos: [topK, 1000]. Un valor mayor puede mejorar la recuperación, pero también puede incrementar el tiempo de consulta.

Columnas devueltas

request.columnsToGet es un objeto SearchRequest.ColumnsToGet que contiene los siguientes parámetros.

Nombre

Tipo

Descripción

columns (opcional)

List<String>

Las columnas de atributos que se devolverán. Configure este parámetro solo si tanto returnAll como returnAllFromIndex son false. Si no se configura este parámetro, solo se devuelven las columnas de clave principal.

returnAll (opcional)

boolean

Especifica si se deben devolver todas las columnas de atributos de la tabla. Valor predeterminado: false.

returnAllFromIndex (opcional)

boolean

Especifica si se deben devolver todas las columnas de atributos indexadas. Valor predeterminado: false. Este parámetro y returnAll no pueden establecerse ambos en true.

Respuesta

Respuesta de búsqueda

search devuelve un objeto SearchResponse. La siguiente tabla describe los campos principales.

Nombre

Tipo

Descripción

totalCount

long

El número de filas coincidentes. Llame a getTotalCount() para obtener el valor. El valor devuelto depende de trackTotalCount.

rows

List<Row>

Las filas devueltas por esta consulta. Llame a getRows() para obtener el valor. El número de filas devueltas no supera limit.

searchHits

List<SearchHit>

Los aciertos de la consulta. Llame a getSearchHits() para obtener las filas y sus puntuaciones.

nextToken

byte[]

El token para la siguiente página. Llame a getNextToken() para obtener el valor. Si el valor no es null, páselo como token en la siguiente solicitud para recuperar más datos.

isAllSuccess

boolean

Indica si se consultaron todas las particiones de índice. Llame a isAllSuccess() para obtener el valor. Si este campo es false, la respuesta contiene resultados parciales y totalCount puede ser menor que el número real de filas coincidentes.

Acierto de búsqueda

Cada elemento en response.searchHits[] es un objeto SearchHit que contiene los siguientes campos principales.

Nombre

Tipo

Descripción

row

Row

La fila coincidente. Llame a getRow() para obtener el valor.

score

Double

La puntuación de la consulta vectorial. Llame a getScore() para obtener el valor. La métrica de distancia y weight afectan este valor.

Ejemplos

Filtrar por condiciones no vectoriales y una puntuación mínima

Utilice filter para exigir que los vecinos más cercanos cumplan condiciones de consulta no vectoriales, y use minScore para excluir los datos cuya puntuación no supere el umbral. El siguiente ejemplo devuelve solo los datos donde category es book, price es menor que 4 y la puntuación vectorial es mayor que 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);

Ajustar el recuento de candidatos

Establezca numCandidates para ampliar el conjunto de candidatos consultados en cada partición de índice cuando se calculan los vecinos más cercanos. El siguiente ejemplo recupera los tres vectores más cercanos a partir de cuatro candidatos.

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);

Temas relacionados