O KnnVectorQuery realiza buscas de vizinhos mais próximos aproximados (ANN) ao comparar um vetor numérico com grandes conjuntos de dados para identificar os itens mais semelhantes.
Pré-requisitos
Inicialize um cliente do Tablestore.
Crie um índice de busca com um campo vetorial na tabela de dados.
Notas de uso
-
A busca vetorial requer o Tablestore SDK for Java 5.17.0 ou posterior. Certifique-se de instalar a versão correta do SDK.
NotaPara consultar o histórico de versões do Tablestore SDK for Java, veja Histórico de versões do Java SDK.
Há limites para o número de tipos de campos vetoriais, dimensões e outras propriedades. Para mais informações, consulte Limites do índice de busca.
O índice de busca é particionado no servidor. Cada partição retorna seus próprios TopK vizinhos mais próximos, e o nó cliente agrega os resultados. Por isso, ao usar um token para paginar todos os dados, o total de linhas retornadas depende da quantidade de partições no servidor.
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
fieldName |
Sim |
Nome do campo vetorial. |
|
topK |
Sim |
Número de vizinhos mais próximos a retornar. Para o valor máximo, consulte Limites do índice de busca. Importante
Um valor K maior aumenta a revocação, mas também eleva a latência e o custo da consulta. |
|
float32QueryVector |
Sim |
Vetor de consulta usado na busca por similaridade. |
|
minScore |
Não |
Limiar mínimo de pontuação. O sistema retorna apenas linhas com pontuação superior a este valor. O valor deve ser maior ou igual a 0. Padrão: 0. |
|
filter |
Não |
Filtro que aceita qualquer combinação de condições de consulta não vetoriais. |
Exemplo
O exemplo a seguir recupera os 10 vizinhos mais próximos de um vetor específico, com pontuação mínima de similaridade de 0,1. Os resultados incluem apenas linhas em que Col_Keyword seja 'hangzhou' e Col_Long seja menor que 4.
private static void knnVectorQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
KnnVectorQuery query = new KnnVectorQuery();
query.setFieldName("Col_Vector");
query.setTopK(10); // Return the top K nearest neighbors.
query.setMinScore(0.1f); // Return only rows with a score greater than 0.1.
query.setFloat32QueryVector(new float[]{0.1f, 0.2f, 0.3f, 0.4f});
// The nearest neighbors must also satisfy the conditions: Col_Keyword = 'hangzhou' AND Col_Long < 4.
query.setFilter(QueryBuilders.bool()
.must(QueryBuilders.term("Col_Keyword", "hangzhou"))
.must(QueryBuilders.range("Col_Long").lessThan(4))
);
searchQuery.setQuery(query);
searchQuery.setLimit(10);
// Sort the results by score.
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("Col_Keyword", "Col_Long"));
searchRequest.setColumnsToGet(columnsToGet);
// Call the search operation.
SearchResponse resp = client.search(searchRequest);
for (SearchHit hit : resp.getSearchHits()) {
// Print the score.
System.out.println(hit.getScore());
// Print the row data.
System.out.println(hit.getRow());
}
}
FAQ
Tópicos relacionados
-
Ao usar um índice de busca para consultar dados, utilize os seguintes métodos: consulta por termo, consulta por termos, consulta match all, consulta match, consulta match phrase, consulta por prefixo, consulta por intervalo, consulta por curinga, consulta geográfica, consulta vetorial KNN, consulta booleana, consulta aninhada e consulta exists. Após criar o índice de busca, use esses métodos para consultar dados em múltiplas dimensões conforme as necessidades do negócio.
Use os recursos de ordenação e paginação para classificar ou paginar as linhas que atendem às condições da consulta. Para mais informações, consulte Executar ordenação e paginação.
Use o recurso de colapso (distinct) para agrupar o conjunto de resultados com base em uma coluna específica. Dessa forma, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais detalhes, veja Colapso (distinct).
Para analisar dados em uma tabela, chame a operação Search para usar o recurso de agregação ou o recurso de consulta SQL. É possível obter valores máximos e mínimos, soma dos valores e contagem de linhas, por exemplo. Para mais informações, consulte Agregação e Consulta SQL.
Para obter todas as linhas que atendem às condições de consulta sem precisar ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.