Explication du filtrage

Milvus offre de puissantes capacités de filtrage qui permettent une interrogation précise de vos données. Les expressions de filtre vous permettent de cibler des champs scalaires spécifiques et d'affiner les résultats de la recherche avec différentes conditions. Ce guide explique comment utiliser les expressions de filtre dans Milvus, avec des exemples axés sur les opérations de requête. Vous pouvez également appliquer ces filtres dans les requêtes de recherche et de suppression.

Opérateurs de base

Milvus prend en charge plusieurs opérateurs de base pour filtrer les données :

  • Opérateurs de comparaison: ==, !=, >, <, >=, et <= permettent de filtrer sur la base de champs numériques ou textuels.

  • Filtres de plage: IN et LIKE permettent de faire correspondre des plages ou des ensembles de valeurs spécifiques.

  • Opérateurs arithmétiques: + Les opérateurs arithmétiques, -, *, /, % et ** sont utilisés pour les calculs impliquant des champs numériques.

  • Opérateurs logiques: AND, OR, et NOT combinent plusieurs conditions dans des expressions complexes.

  • Opérateurs IS NULL et IS NOT NULL: Les opérateurs IS NULL et IS NOT NULL sont utilisés pour filtrer les champs selon qu'ils contiennent ou non une valeur nulle (absence de données). Pour plus d'informations, reportez-vous à la section Opérateurs de base.

Exemple : Filtrage par couleur

Pour trouver des entités ayant des couleurs primaires (rouge, vert ou bleu) dans un champ scalaire color, utilisez l'expression de filtrage suivante :

filter='color in ["red", "green", "blue"]'

Exemple : Filtrage des champs JSON

Milvus permet de référencer des clés dans des champs JSON. Par exemple, si vous avez un champ JSON product avec les clés price et model, et que vous voulez trouver des produits avec un modèle spécifique et un prix inférieur à 1 850, utilisez l'expression de filtre suivante :

filter='product["model"] == "JSN-087" AND product["price"] < 1850'

Exemple : Filtrage des champs de type tableau

Si vous disposez d'un champ de tableau history_temperatures contenant les enregistrements des températures moyennes rapportées par les observatoires depuis l'année 2000, et que vous souhaitez trouver les observatoires dont la température en 2009 (la 10e enregistrée) dépasse 23°C, utilisez cette expression :

filter='history_temperatures[10] > 23'

Pour plus d'informations sur ces opérateurs de base, reportez-vous à la section Opérateurs de base.

Modèles d'expression de filtrage

Lors d'un filtrage utilisant des caractères CJK, le traitement peut être plus complexe en raison des jeux de caractères plus importants et des différences d'encodage. Cela peut entraîner des performances plus lentes, en particulier avec l'opérateur IN.

Milvus introduit un modèle d'expression de filtre pour optimiser les performances lors de l'utilisation de caractères CJK. En séparant les valeurs dynamiques de l'expression de filtre, le moteur de requête traite l'insertion de paramètres plus efficacement.

Exemple

Pour trouver les personnes âgées de plus de 25 ans vivant à "北京" (Pékin) ou "上海" (Shanghai), utilisez le modèle d'expression suivant :

filter = "age > 25 AND city IN ['北京', '上海']"

Pour améliorer les performances, utilisez cette variante avec des paramètres :

filter = "age > {age} AND city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}

Cette approche permet de réduire la charge d'analyse et d'améliorer la vitesse d'interrogation. Pour plus d'informations, voir la section Modélisation des filtres.

Opérateurs spécifiques aux types de données

Milvus fournit des opérateurs de filtrage avancés pour des types de données spécifiques, tels que les champs JSON, ARRAY et VARCHAR.

Opérateurs spécifiques aux champs JSON

Milvus propose des opérateurs avancés pour l'interrogation des champs JSON, permettant un filtrage précis dans des structures JSON complexes :

JSON_CONTAINS(identifier, jsonExpr): Vérifie si une expression JSON existe dans le champ.

# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'

JSON_CONTAINS_ALL(identifier, jsonExpr): Vérifie que tous les éléments de l'expression JSON sont présents.

# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'

JSON_CONTAINS_ANY(identifier, jsonExpr): Filtre les entités pour lesquelles il existe au moins un élément dans l'expression JSON.

# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'

Pour plus de détails sur les opérateurs JSON, voir Opérateurs JSON.

Opérateurs spécifiques aux champs ARRAY

Milvus propose des opérateurs de filtrage avancés pour les champs de type tableau, tels que ARRAY_CONTAINS, ARRAY_CONTAINS_ALL, ARRAY_CONTAINS_ANY, et ARRAY_LENGTH, qui permettent un contrôle fin des données de type tableau :

ARRAY_CONTAINS: Filtre les entités contenant un élément spécifique.

filter="ARRAY_CONTAINS(history_temperatures, 23)"

ARRAY_CONTAINS_ALL: Filtre les entités où tous les éléments d'une liste sont présents.

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

ARRAY_CONTAINS_ANY: Filtre les entités contenant n'importe quel élément de la liste.

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

ARRAY_LENGTH: Filtre en fonction de la longueur du tableau.

filter="ARRAY_LENGTH(history_temperatures) < 10"

Pour plus de détails sur les opérateurs de tableau, voir Opérateurs de tableau.

Opérateurs spécifiques aux champs VARCHAR

Milvus fournit des opérateurs spécialisés pour les recherches textuelles précises sur les champs VARCHAR :

TEXT_MATCH opérateur

L'opérateur TEXT_MATCH permet une recherche précise de documents sur la base de termes d'interrogation spécifiques. Il est particulièrement utile pour les recherches filtrées qui combinent des filtres scalaires avec des recherches de similarité vectorielle. Contrairement aux recherches sémantiques, la correspondance textuelle se concentre sur les occurrences exactes des termes.

Milvus utilise Tantivy pour prendre en charge l'indexation inversée et la recherche textuelle basée sur les termes. Le processus implique

  1. Analyseur: Tokenise et traite le texte d'entrée.

  2. Indexation: Création d'un index inversé mettant en correspondance des tokens uniques avec des documents.

Pour plus de détails, reportez-vous à la section Correspondance de texte.

PHRASE_MATCH opérateurCompatible with Milvus 2.6.x

L'opérateur PHRASE_MATCH permet d'extraire avec précision des documents sur la base de correspondances exactes de phrases, en tenant compte à la fois de l'ordre et de l'adjacence des termes de la requête.

Pour plus de détails, reportez-vous à la section Correspondance de phrases.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

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