Búsqueda por clave primariaCompatible with Milvus 2.6.9+
Al realizar búsquedas de similitud, siempre se le pide que proporcione uno o más vectores de consulta, incluso si los vectores de consulta ya están presentes en la colección de destino. Para evitar recuperar vectores antes de la búsqueda, puede utilizar claves primarias.
Resumen
En las plataformas de comercio electrónico, los usuarios pueden introducir una palabra clave para recuperar productos que coincidan con ella. Una vez que el usuario visualiza la página de detalles de un producto, la plataforma también mostrará una lista de productos similares en la parte inferior de la página para los usuarios que deseen compararlos.
Las recomendaciones se ordenan por su similitud con la palabra clave o el producto actual. Para conseguir esto, los desarrolladores de la plataforma necesitan recuperar la representación vectorial de la palabra clave o del producto actual de Milvus antes de la búsqueda de similitud real, lo que aumenta el viaje de ida y vuelta entre la plataforma y Milvus y resulta en un gran número de flotantes de alta dimensión que se transmiten a través de la red.
Para simplificar la lógica de interacción entre sus aplicaciones y Milvus, reducir el número de viajes de ida y vuelta y evitar la transmisión de grandes cantidades de valores de punto flotante de alta dimensión a través de la red, considere el uso de búsquedas de clave primaria.
En una búsqueda de clave primaria, no necesita proporcionar ningún vector de consulta. En su lugar, se le piden las claves primarias (ids) de las entidades que contienen los vectores de consulta.
Límites y restricciones
Las búsquedas que utilizan claves primarias se aplican a todos los tipos de datos vectoriales, excepto los campos vectoriales dispersos derivados de campos VarChar, como en las funciones BM25.
Puede utilizar claves primarias en lugar de vectores de consulta en búsquedas filtradas, de rango y de agrupación, opcionalmente con la paginación activada. Sin embargo, esta función no se aplica a las búsquedas híbridas ni a los iteradores de búsqueda.
En el caso de las búsquedas por similitud que incluyen listas de incrustación, sigue siendo necesario recuperar los vectores de consulta, organizarlos en listas de incrustación y ejecutar las búsquedas.
No puede utilizar claves primarias en lugar de vectores de consulta en las API RESTful.
En el caso de claves primarias inexistentes o con un formato incorrecto, Milvus mostrará errores.
Las claves primarias y los vectores de consulta son mutuamente excluyentes. Proporcionar ambos también da lugar a errores.
Ejemplos
Los siguientes ejemplos suponen que todos los ID Int64 proporcionados están disponibles en la colección de destino.
Las claves primarias no se utilizan para filtrar; sólo se utilizan para recuperar vectores.
Ejemplo 1: Búsqueda básica de claves primarias
Para realizar una búsqueda básica de clave primaria, basta con sustituir los vectores de consulta por claves primarias.
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
Ejemplo 2. Búsqueda filtrada mediante claves primarias Búsqueda filtrada mediante claves primarias
El siguiente ejemplo asume que color y me gusta son dos campos definidos por esquema en la colección 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
Ejemplo 3. Búsqueda por rango utilizando claves primarias Búsqueda por rango utilizando claves primarias
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
Ejemplo 4: Búsqueda por agrupación utilizando claves primarias
El siguiente ejemplo asume que docId es un campo definido por esquema en la colección 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