A pesquisa de vetores com o Tablestore SDK for Node.js retorna os dados mais próximos em um índice de pesquisa por similaridade de vetor e oferece suporte a limiares de pontuação, contagem de candidatos e filtros não vetoriais.
Pré-requisitos
Inicialize uma instância do OTSClient. Para mais informações, consulte Inicializar um cliente Tablestore.
Crie um índice de pesquisa e configure o campo de vetor na tabela de dados. Para mais informações, consulte Criar um índice de pesquisa.
Notas de uso
-
O recurso de consulta de vetor KNN é compatível com o Tablestore SDK for Node.js versão 5.5.0 ou posterior. Certifique-se de instalar 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 de vetor, dimensões e outras propriedades. Para mais informações, consulte Limites do índice de pesquisa.
O índice de pesquisa é particionado no servidor. Cada partição retorna seus próprios vizinhos mais próximos TopK e os resultados são agregados no nó cliente. Portanto, ao usar um token para paginar todos os dados, o número total de linhas retornadas depende do número de partições do servidor.
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
fieldName |
Sim |
O nome do campo de vetor. |
|
topK |
Sim |
O número de vizinhos mais próximos a retornar. Para o valor máximo, consulte Limites do índice de pesquisa. Importante
Um valor de K maior aumenta o recall, mas também aumenta a latência e o custo da consulta. |
|
float32QueryVector |
Sim |
O vetor de consulta usado para a pesquisa de similaridade. |
|
minScore |
Não |
Defina o limiar de pontuação mínima. Apenas linhas com pontuação maior que esse valor são retornadas. O valor deve ser maior ou igual a 0. Padrão: 0. |
|
filter |
Não |
Um filtro que aceita qualquer combinação de condições de consulta não vetoriais. |
Exemplo
O código de exemplo a seguir mostra como consultar os dez vizinhos mais próximos de um vetor específico em uma tabela de dados. Neste exemplo, o valor da coluna col_keyword dos vetores vizinhos mais próximos 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
Otimizar o desempenho de recuperação de vetores no Tablestore
Referências
-
Os índices de pesquisa aceitam os seguintes tipos de consulta: consulta de termo, consulta de termos, consulta de correspondência total, consulta de correspondência, consulta de correspondência de frase, consulta de prefixo, consulta de intervalo, consulta de curinga, consulta booleana, consulta geográfica, consulta aninhada, consulta de vetor e consulta de existência. Selecione um tipo de consulta para consultar dados de acordo com os requisitos de negócio.
Para classificar ou paginar as linhas que atendem às condições de consulta, use o recurso de classificação e paginação. Para mais informações, consulte Classificação e paginação.
Para colapsar o conjunto de resultados com base em uma coluna específica, use o recurso de colapso (distinct). Dessa forma, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais informações, consulte Colapso (distinct).
Para analisar dados em uma tabela de dados, como obter valores extremos, soma e número total de linhas, execute operações de agregação ou instruções SQL. Para mais informações, consulte Agregação e Consulta SQL.
Para obter rapidamente todas as linhas que atendem às condições de consulta sem precisar classificá-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.