A KnnVectorQuery executa 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
Instância OTSClient inicializada. Para obter mais informações, consulte Inicializar um cliente do Tablestore.
Índice de busca criado e campo vetorial configurado na tabela de dados. Para obter mais informações, consulte Crie um índice de busca.
Observações de uso
-
O recurso de consulta vetorial KNN exige o Tablestore SDK for Node.js versão 5.5.0 ou posterior. Verifique se você instalou uma versão compatível do Tablestore SDK for Node.js.
NotaPara obter informações sobre o histórico de versões do Tablestore SDK for Node.js, consulte Histórico de versões do Tablestore SDK for Java.
Há limites para o número de tipos de campos vetoriais, dimensões e outras propriedades. Para obter 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. Portanto, ao usar um token para paginar todos os dados, o total de linhas retornadas depende da quantidade de partições do 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 código de exemplo abaixo demonstra como consultar os dez vizinhos mais próximos de um vetor específico em uma tabela de dados. Neste cenário, o valor da coluna col_keyword dos vetores vizinhos deve ser igual a "0" e o valor da coluna col_long deve estar entre 0 e 50.
const tableName = "<TABLE_ANME>"
const indexName = "<SEARCH_INDEX_NAME>"
async function knnVectorQuery() {
return new Promise(function (resolve, reject) {
let params = {
tableName: tableName,
indexName: indexName,
searchQuery: {
offset: 0,
limit: 10,
query: {
queryType: TableStore.QueryType.KNN_VECTOR_QUERY,
query: {
fieldName: "col_vector",
topK: TableStore.Long.fromNumber(10),
float32QueryVector: [1.0, 1.1, 1.2, -1.3],
filter: {
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
mustQueries: [
{
queryType: TableStore.QueryType.RANGE_QUERY,
query: {
fieldName: "col_long",
rangeFrom: TableStore.Long.fromNumber(0),
includeLower: true,
rangeTo: TableStore.Long.fromNumber(50),
includeUpper: true,
}
},
{
queryType: TableStore.QueryType.TERM_QUERY,
query: {
fieldName: "col_keyword",
term: "0",
}
},
],
}
},
},
},
sort: {
sorters: [
{
scoreSort: {
order: TableStore.SortOrder.SORT_ORDER_DESC // Sort the query results based on the scores in descending order.
}
}
],
},
getTotalCount: false,
},
columnToGet: {
returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
returnNames: ["col_long", "col_keyword"]
},
timeoutMs: 10000,
}
client.search(params, function (err, data) {
if (err) {
console.log('search error:', err.toString());
reject(err);
} else {
console.log('RequestId:', data.RequestId);
for (let i = 0; i < data.searchHits.length; i++) {
let hit = data.searchHits[i]
console.log('Score:', hit.score, 'Row:', hit.row);
}
resolve(data)
}
});
})
}
knnVectorQuery();
Perguntas frequentes
Referências
-
Os índices de busca oferecem suporte aos seguintes tipos de consulta: consulta de termo, consulta de termos, consulta match all, consulta match, consulta match phrase, consulta de prefixo, consulta de intervalo, consulta curinga, consulta booleana, consulta geográfica, consulta aninhada, consulta vetorial e consulta exists. Selecione o tipo adequado conforme as necessidades do seu negócio para consultar dados.
Para ordenar ou paginar as linhas que atendem às condições da consulta, utilize o recurso de classificação e paginação. Para obter mais informações, consulte Classificação e paginação.
Caso precise agrupar o conjunto de resultados com base em uma coluna específica, use o recurso collapse (distinct). Isso garante que dados do tipo especificado apareçam apenas uma vez nos resultados da consulta. Para obter mais informações, consulte Collapse (distinct).
Para analisar dados em uma tabela, como obter valores extremos, soma e contagem total de linhas, execute operações de agregação ou instruções SQL. Para obter mais informações, consulte Agregação e Consulta SQL.
Se o objetivo for obter rapidamente todas as linhas correspondentes aos critérios sem necessidade de ordenação, chame as operações ParallelScan e ComputeSplits para utilizar a varredura paralela. Para obter mais informações, consulte Varredura paralela.