Opérateurs ARRAY

Milvus fournit des opérateurs ARRAY permettant de filtrer les champs ARRAY et de mettre à jour partiellement les valeurs de ces champs.

Tous les éléments d'un tableau doivent être du même type, et les structures imbriquées au sein des tableaux sont traitées comme de simples chaînes de caractères. Par conséquent, lorsque vous travaillez avec des champs ARRAY, il est conseillé d'éviter les imbrications trop profondes et de veiller à ce que vos structures de données soient aussi plates que possible pour des performances optimales.

Les opérateurs ARRAY de Milvus couvrent deux cas d’utilisation :

  • Les expressions de filtrage pour les requêtes et les recherches.

  • Mises à jour partielles dans les requêtes « upsert ».

Opérateurs ARRAY disponibles

Le tableau suivant répertorie les opérateurs ARRAY disponibles dans Milvus.

OpérateurUtilisation dansDescription
ARRAY_CONTAINS(identifiant, expr)Expression de filtrageVérifie si un élément spécifique existe dans un champ ARRAY.
ARRAY_CONTAINS_ALL(identifiant, expr)Expression de filtrageVérifie si tous les éléments d'une liste spécifiée existent dans un champ ARRAY.
ARRAY_CONTAINS_ANY(identifiant, expr)Expression de filtrageVérifie si au moins un élément d'une liste spécifiée figure dans un champ ARRAY.
ARRAY_LENGTH(identifiant)Expression de filtrageRenvoie le nombre d'éléments d'un champ ARRAY et peut être combinée avec des opérateurs de comparaison à des fins de filtrage.
ARRAY_APPENDupsert avec field_opsAjoute des éléments de charge utile à un champ ARRAY existant. Disponible dans Milvus v2.6.17 et versions ultérieures.
ARRAY_REMOVEupsert avec field_opsSupprime tous les éléments d’un champ ARRAY existant qui correspondent à une valeur de la charge utile de la requête. Disponible à partir de Milvus v2.6.17.

ARRAY_CONTAINS

L'opérateur « ARRAY_CONTAINS » vérifie si un élément spécifique existe dans un champ de type « ARRAY ». Il est utile lorsque vous souhaitez rechercher des entités dans lesquelles un élément donné est présent dans le tableau.

Exemple

Supposons que vous disposiez d’un champ de type tableau history_temperatures, qui contient les températures minimales enregistrées pour différentes années. Pour trouver toutes les entités dont le tableau contient la valeur 23, vous pouvez utiliser l’expression de filtrage suivante :

filter = 'ARRAY_CONTAINS(history_temperatures, 23)'

Cela renverra toutes les entités pour lesquelles le tableau ` history_temperatures ` contient la valeur ` 23`.

ARRAY_CONTAINS_ALL

L’opérateur « ARRAY_CONTAINS_ALL » garantit que tous les éléments de la liste spécifiée sont présents dans le champ de type tableau. Cet opérateur est utile lorsque vous souhaitez faire correspondre des entités contenant plusieurs valeurs dans le tableau.

Exemple

Si vous souhaitez rechercher toutes les entités dont le tableau « history_temperatures » contient à la fois « 23 » et « 24 », vous pouvez utiliser :

filter = 'ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])'

Cela renverra toutes les entités dont le tableau « history_temperatures » contient les deux valeurs spécifiées.

ARRAY_CONTAINS_ANY

L’opérateur ` ARRAY_CONTAINS_ANY ` vérifie si l’un des éléments de la liste spécifiée est présent dans le champ de type tableau. Cela est utile lorsque vous souhaitez faire correspondre les entités qui contiennent au moins l’une des valeurs spécifiées dans le tableau.

Exemple

Pour rechercher toutes les entités dont le tableau « history_temperatures » contient soit « 23 », soit « 24 », vous pouvez utiliser :

filter = 'ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])'

Cela renverra toutes les entités dont le tableau ` history_temperatures ` contient au moins l’une des valeurs suivantes : ` 23 ` ou ` 24`.

ARRAY_LENGTH

L'ARRAY_LENGTH renvoie la longueur (nombre d'éléments) d'un champ de type tableau. Elle accepte exactement un paramètre : l'identifiant du champ de type tableau.

Exemple

Pour rechercher toutes les entités dont le tableau « history_temperatures » comporte moins de 10 éléments :

filter = 'ARRAY_LENGTH(history_temperatures) < 10'

Cela renverra toutes les entités dont le tableau « history_temperatures » comporte moins de 10 éléments.

ARRAY_APPENDCompatible with Milvus 2.6.17+

L'opérateur ARRAY_APPEND ajoute des éléments de charge utile à un champ ARRAY existant lors d'une requête d'upsert. Il ne s'agit pas d'une expression de filtrage. Utilisez-le lorsque vous souhaitez ajouter des valeurs à un tableau sans interroger au préalable la valeur actuelle du tableau.

L’exemple Python suivant ajoute des éléments via ` "premium" ` au champ `ARRAY` de l’entité dont la clé primaire est ` 1` lors d’une requête ` tags ` :

from pymilvus import FieldOp, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

client.upsert(
    collection_name="users",
    data=[{"pk": 1, "tags": ["premium"]}],
    field_ops={"tags": FieldOp.array_append()},
)

L’ajout de ARRAY_APPEND à un champ via field_ops active la sémantique de mise à jour partielle pour ce champ. Pour connaître le workflow complet, les types d’éléments pris en charge et les limites, consultez la section Champs ARRAY « Upsert » en mode fusion.

ARRAY_REMOVECompatible with Milvus 2.6.17+

L’opérateur « ARRAY_REMOVE » supprime tous les éléments d’un champ ARRAY existant qui correspondent à une valeur de la charge utile de la requête lors d’une requête « upsert ». Il ne s’agit pas d’une expression de filtrage. Utilisez-le lorsque vous souhaitez supprimer les valeurs correspondantes d’un tableau sans interroger au préalable la valeur actuelle du tableau.

L’exemple Python suivant supprime les éléments « "trial" » du champ ARRAY « tags » de l’entité dont la clé primaire est « 1 » :

from pymilvus import FieldOp, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

client.upsert(
    collection_name="users",
    data=[{"pk": 1, "tags": ["trial"]}],
    field_ops={"tags": FieldOp.array_remove()},
)

L’association d’ ARRAY_REMOVE à un champ via field_ops active la sémantique de mise à jour partielle pour ce champ. Pour connaître le workflow complet, les types d’éléments pris en charge et les limites, reportez-vous à la section Champs ARRAY « Upsert » en mode fusion.

Traduit parDeepL

Essayez Milvus géré gratuitement

Zilliz Cloud est sans souci, propulsé par Milvus et 10 fois plus rapide.

Commencer
Feedback

Cette page a-t - elle été utile ?