Pesquisa de chave primáriaCompatible with Milvus 2.6.9+
Ao realizar pesquisas de similaridade, é sempre solicitado que forneça um ou mais vectores de consulta, mesmo que os vectores de consulta já estejam presentes na coleção de destino. Para evitar a recuperação de vectores antes da pesquisa, pode utilizar chaves primárias.
Visão geral
Nas plataformas de comércio eletrónico, os utilizadores podem introduzir uma palavra-chave para obter produtos que correspondam à mesma. Quando o utilizador visualiza a página de detalhes de um produto, a plataforma também apresenta uma lista de produtos semelhantes na parte inferior da página para os utilizadores que pretendam compará-los.
As recomendações são ordenadas pela sua semelhança com a palavra-chave ou com o produto atual. Para tal, os programadores da plataforma têm de obter a representação vetorial da palavra-chave ou do produto atual a partir do Milvus antes da pesquisa de semelhanças propriamente dita, o que aumenta o tempo de ida e volta entre a plataforma e o Milvus e resulta na transmissão de um grande número de dados flutuantes de elevada dimensão através da rede.
Para simplificar a lógica de interação entre as suas aplicações e o Milvus, reduzir o número de viagens de ida e volta e evitar a transmissão de grandes quantidades de valores de vírgula flutuante de elevada dimensão através da rede, considere a utilização de pesquisas de chave primária.
Numa pesquisa de chave primária, não é necessário fornecer quaisquer vectores de consulta. Em vez disso, é-lhe pedido que forneça as chaves primárias (ids) das entidades que contêm os vectores de consulta.
Limites e restrições
As pesquisas que utilizam chaves primárias aplicam-se a todos os tipos de dados vectoriais, exceto campos vectoriais esparsos derivados de campos VarChar, como nas funções BM25.
É possível usar chaves primárias em vez de vetores de consulta em pesquisas filtradas, de intervalo e de agrupamento, opcionalmente com a paginação ativada. No entanto, esse recurso não se aplica a pesquisas híbridas e iteradores de pesquisa.
Para pesquisas de similaridade envolvendo listas incorporadas, ainda é necessário recuperar os vetores de consulta, organizá-los em listas incorporadas e executar as pesquisas.
Não é possível usar chaves primárias em vez de vetores de consulta em APIs RESTful.
Se existirem chaves primárias inexistentes ou num formato incorreto, o Milvus apresentará erros.
As chaves primárias e os vectores de consulta são mutuamente exclusivos. Fornecer ambos também resulta em erros.
Exemplos
Os exemplos seguintes assumem que todos os IDs Int64 fornecidos estão disponíveis na coleção de destino.
As chaves primárias não são utilizadas para filtragem; são utilizadas apenas para recuperação de vectores.
Exemplo 1: Pesquisa básica de chave primária
Para realizar uma pesquisa básica de chave primária, basta substituir os vetores de consulta por chaves primárias.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.search(
collection_name="quick_setup",
anns_field="vector",
ids=[551, 296, 43], # a list of primary keys
limit=3,
search_params={"metric_type": "IP"}
)
for hits in res:
for hit in hits:
print(hit)
// java
// node.js
// go
# restful
Exemplo 2: Pesquisa filtrada usando chaves primárias
O exemplo a seguir assume que cor e curtidas são dois campos definidos pelo esquema na coleção de destino.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43], #
filter='color like "red%" and likes > 50',
output_fields=["color", "likes"],
limit=3,
)
// java
// node.js
// go
# restful
Exemplo 3: Pesquisa de intervalo usando chaves primárias
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
search_params={
"params": {
"radius": 0.4,
"range_filter": 0.6
}
}
)
// java
// node.js
// go
# restful
Exemplo 4: pesquisa de agrupamento usando chaves primárias
O exemplo seguinte assume que docId é um campo definido pelo esquema na coleção de destino.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
group_by_field="docId",
output_fields=["docId"]
)
// java
// node.js
// go
# restful