Todos os produtos
Search
Central de documentação

Tablestore:Vector search

Última atualização: Aug 20, 2026

A busca vetorial com o Tablestore SDK for Java retorna os dados mais próximos em um índice de busca por similaridade de vetores e oferece suporte a limiares de pontuação, contagem de candidatos e filtros não vetoriais.

Pré-requisitos

  • Instale o Tablestore SDK for Java e inicialize o cliente. A busca vetorial requer a versão 5.17.0 ou posterior.

  • Para configurar minScore ou numCandidates, use a versão 5.17.5 ou posterior.

Descrição do recurso

A busca vetorial executa uma pesquisa de vizinho mais próximo aproximado (ANN) entre um vetor de consulta e os vetores em um campo Vector. O Tablestore pontua os resultados com a métrica de distância configurada na criação do índice de busca e retorna os dados mais próximos. Ao contrário das consultas que correspondem a valores de campos, a busca vetorial determina a similaridade com base na distância entre os vetores.

Chame search e defina query como KnnVectorQuery.

SearchResponse search(SearchRequest request)

O exemplo a seguir recupera os três vetores no campo embedding mais próximos de [1.0, 0.0, 0.0, 0.0]. Os resultados são classificados por pontuação em ordem decrescente.

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

Há limites para o número e as dimensões dos campos vetoriais e para topK. Para obter detalhes, consulte Search index limits.

Parâmetros

Solicitação de busca

request é um objeto SearchRequest que contém os seguintes parâmetros.

Nome

Tipo

Descrição

tableName (obrigatório)

String

Nome da tabela.

indexName (obrigatório)

String

Nome do índice de busca.

searchQuery (obrigatório)

SearchQuery

Condição de consulta e configurações comuns de consulta.

columnsToGet (opcional)

SearchRequest.ColumnsToGet

Configurações das colunas retornadas. Se este parâmetro não for configurado, apenas as colunas de chave primária serão retornadas.

timeoutInMillisecond (opcional)

int

Tempo limite da consulta no nível da solicitação, em milissegundos. Padrão: -1, que não define um tempo limite de consulta separado.

routingValues (opcional)

List<PrimaryKey>

Valores de chave primária dos campos de roteamento personalizados. Deixe este parâmetro indefinido se o roteamento personalizado não estiver configurado.

Configuração da consulta

request.searchQuery é um objeto SearchQuery que contém os seguintes parâmetros.

Nome

Tipo

Descrição

query (obrigatório)

Query

Condição da consulta. Defina este parâmetro como KnnVectorQuery para busca vetorial.

offset (opcional)

Integer

Posição inicial da consulta.

limit (opcional)

Integer

Número máximo de linhas a retornar. Se definido como 0, nenhuma linha será retornada.

highlight (opcional)

Highlight

Configurações de resumo e destaque. Campos vetoriais não oferecem suporte a resumo e destaque.

collapse (opcional)

Collapse

Configuração de colapso para deduplicar resultados com base em uma coluna especificada.

sort (opcional)

Sort

Ordem de classificação dos resultados. Use ScoreSort para classificar por pontuação.

trackTotalCount (opcional)

int

Número máximo de linhas correspondentes a contar. Padrão: TRACK_TOTAL_COUNT_DISABLED, que desativa a contagem. Defina como TRACK_TOTAL_COUNT para contar todas as linhas correspondentes. Um valor menor melhora o desempenho da consulta.

filter (opcional)

SearchFilter

Filtro aplicado aos resultados de query.

aggregationList (opcional)

List<Aggregation>

Configurações de agregação.

groupByList (opcional)

List<GroupBy>

Configurações de agrupamento.

token (opcional)

byte[]

Token de paginação. Defina este parâmetro com o valor de nextToken da resposta anterior para recuperar mais dados. Cada partição de índice no servidor retorna seus próprios topK valores mais próximos, mesclados em um nó coordenador. Portanto, ao paginar com token, o número acumulado de linhas retornadas depende da quantidade de partições de índice no servidor.

Condição de consulta vetorial

request.searchQuery.query é um objeto KnnVectorQuery que contém os seguintes parâmetros.

Nome

Tipo

Descrição

fieldName (obrigatório)

String

Nome do campo vetorial. O campo deve ser do tipo Vector e a dimensão do vetor de consulta deve corresponder à dimensão configurada quando você criou o índice de busca.

topK (obrigatório)

Integer

Quantidade de vetores mais próximos a recuperar. Máximo: 1000. Um valor maior retorna mais candidatos e pode melhorar a revocação, mas também aumenta a latência e o custo da consulta.

float32QueryVector (obrigatório)

float[]

Vetor de consulta Float32 usado para calcular a similaridade. O comprimento do array deve corresponder à dimensão do campo vetorial.

filter (opcional)

Query

Condições de consulta não vetoriais que os resultados da busca vetorial também devem atender. É possível combinar vários objetos Query não vetoriais.

weight (opcional)

Float

Peso de relevância da consulta vetorial. O valor deve ser maior ou igual a 0. Padrão: 1.0. Um valor maior aumenta a influência da pontuação da consulta vetorial na pontuação final de relevância, sem alterar as linhas correspondentes.

minScore (opcional)

Float

Limiar mínimo de pontuação. O valor deve ser maior ou igual a 0. Padrão: 0. Apenas dados com pontuação estritamente maior que esse valor são retornados.

numCandidates (opcional)

Integer

Número de candidatos acessados em cada partição de índice durante o cálculo dos vizinhos mais próximos. Valores válidos: [topK, 1000]. Um valor maior pode melhorar a revocação, mas também aumenta o tempo de consulta.

Colunas retornadas

request.columnsToGet é um objeto SearchRequest.ColumnsToGet que contém os seguintes parâmetros.

Nome

Tipo

Descrição

columns (opcional)

List<String>

Colunas de atributo a retornar. Configure este parâmetro somente se returnAll e returnAllFromIndex forem false. Se não configurado, apenas as colunas de chave primária serão retornadas.

returnAll (opcional)

boolean

Especifica se todas as colunas de atributo da tabela devem ser retornadas. Padrão: false.

returnAllFromIndex (opcional)

boolean

Especifica se todas as colunas de atributo indexadas devem ser retornadas. Padrão: false. Este parâmetro e returnAll não podem ser definidos como true simultaneamente.

Resposta

Resposta da busca

search retorna um objeto SearchResponse. A tabela a seguir descreve os campos principais.

Nome

Tipo

Descrição

totalCount

long

Número de linhas correspondentes. Chame getTotalCount() para obter o valor. O valor retornado depende de trackTotalCount.

rows

List<Row>

Linhas retornadas por esta consulta. Chame getRows() para obter o valor. O número de linhas retornadas não excede limit.

searchHits

List<SearchHit>

Acertos da consulta. Chame getSearchHits() para obter as linhas e suas respectivas pontuações.

nextToken

byte[]

Token para a próxima página. Chame getNextToken() para obter o valor. Se o valor não for null, passe-o como token na próxima solicitação para recuperar mais dados.

isAllSuccess

boolean

Indica se todas as partições de índice foram consultadas. Chame isAllSuccess() para obter o valor. Se este campo for false, a resposta conterá resultados parciais e totalCount poderá ser menor que o número real de linhas correspondentes.

Acerto da busca

Cada elemento em response.searchHits[] é um objeto SearchHit que contém os seguintes campos principais.

Nome

Tipo

Descrição

row

Row

Linha correspondente. Chame getRow() para obter o valor.

score

Double

Pontuação da consulta vetorial. Chame getScore() para obter o valor. A métrica de distância e weight afetam este valor.

Exemplos

Filtrar por condições não vetoriais e pontuação mínima

Use filter para exigir que os vizinhos mais próximos atendam a condições de consulta não vetoriais e use minScore para excluir dados cuja pontuação não seja maior que o limiar. O exemplo a seguir retorna apenas dados em que category é book, price é menor que 4 e a pontuação vetorial é maior 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 a contagem de candidatos

Defina numCandidates para expandir o conjunto de candidatos acessado em cada partição de índice durante o cálculo dos vizinhos mais próximos. O exemplo a seguir recupera os três vetores mais próximos a partir de quatro 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);

Tópicos relacionados