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
Criar um índice de busca para a tabela de dados e especificar um campo vetorial.
Notas de uso
-
O Tablestore SDK for Python V5.4.4 ou posterior oferece suporte ao recurso de consulta vetorial KNN. Recomendamos usar a versão mais recente do Tablestore SDK for Python.
NotaPara obter informações sobre o histórico de versões do Tablestore SDK for Python, consulte Histórico de versões do SDK para Python.
Há limites para o número de tipos de campos vetoriais, dimensões e outras propriedades. Para mais detalhes, consulte Limites do índice de busca.
O índice de busca é particionado no lado do 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 número total de linhas retornadas depende da quantidade de partições no servidor.
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
field_name |
Sim |
Nome do campo vetorial. |
|
top_k |
Sim |
Os k principais resultados da consulta com maior similaridade em relação ao vetor desejado. Para informações sobre o valor máximo do parâmetro top_k, consulte Limites do índice de busca. Importante
Um valor maior de k indica maior taxa de recall, latência de consulta e custos. |
|
float32_query_vector |
Sim |
Vetor usado como referência para consultar a similaridade. |
|
filter |
Não |
Filtro aplicado à consulta. Use uma combinação de condições que não sejam consultas vetoriais KNN. |
Exemplos
O código de exemplo a seguir demonstra como consultar os 10 principais vetores em uma tabela com maior similaridade em relação a um vetor especificado. Neste cenário, os 10 vetores devem atender às seguintes condições: o valor da coluna col_keyword deve ser 0 e o valor da coluna col_long deve estar entre 0 e 50.
def knn_vector_query(client):
filter_query = BoolQuery(
must_queries=[
TermQuery(field_name='col_keyword', column_value="0"),
RangeQuery(field_name='col_long', range_from=0, range_to=50),
]
)
query = KnnVectorQuery(field_name='col_vector', top_k=10, float32_query_vector=[1.0, 1.1, 1.2, -1.3], filter=filter_query)
# Sort the query results based on scores.
sort = Sort(sorters=[ScoreSort(sort_order=SortOrder.DESC)])
search_query = SearchQuery(query, limit=10, get_total_count=False, sort=sort)
search_response = client.search(
table_name='<TABLE_NAME>',
index_name='<SEARCH_INDEX_NAME>',
search_query=search_query,
columns_to_get=ColumnsToGet(column_names=["col_keyword", "col_long"], return_type=ColumnReturnType.SPECIFIED)
)
print("requestId:", search_response.request_id)
# If the Tablestore SDK for Python that you use cannot obtain search_hits, use Tablestore SDK for Python V6.1.0 or later.
for hit in search_response.search_hits:
# Obtain the row data.
row = hit.row
print(row)
# Obtain the score.
score = hit.score
print(score)
Perguntas frequentes
Referências
-
Ao usar um índice de busca para consultar dados, utilize os seguintes métodos: consulta de termo, consulta de termos, consulta match all, consulta match, consulta match phrase, consulta de prefixo, consulta de intervalo, consulta curinga, consulta geográfica, consulta booleana, consulta vetorial KNN, consulta aninhada e consulta exists. Use esses métodos fornecidos pelo índice de busca para recuperar dados de múltiplas dimensões conforme as necessidades do seu negócio.
Ordene ou pagine as linhas que atendem às condições da consulta usando os recursos de classificação e paginação. Para mais informações, consulte Classificação e paginação.
Use o recurso collapse (distinct) para agrupar o conjunto de resultados com base em uma coluna específica. Assim, dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais detalhes, consulte Collapse (distinct).
Para analisar dados em uma tabela, use o recurso de agregação da operação Search ou execute instruções SQL. Por exemplo, obtenha valores mínimos e máximos, somas e o número total de linhas. Para mais informações, consulte Agregação e Consulta SQL.
Para obter todas as linhas que satisfazem as condições de consulta sem precisar ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Consulte Varredura paralela para mais detalhes.