Cette page présente les concepts qui composent une application Vespa : le package d’application, les schémas, les champs, les profils de ranking et les profils de requête. Pour apprendre à les créer et les configurer, consultez Gérer les schémas.
Package d’application
Un package d’application Vespa est un ensemble de fichiers de configuration qui indiquent au cluster comment stocker et classer les documents :
<app-package>/
├── schemas/
│ └── <document_type>.sd # Définitions de schéma
└── search/
└── query-profiles/
├── <profile_name>.xml # Profils de requête
└── types/root.xml # Types de profils de requêteVous n’écrivez jamais ces fichiers manuellement. Ils sont générés en mémoire à partir de vos migrations et téléchargés sur le cluster Vespa. Vous pouvez les inspecter avec mistral-vespa generate (voir référence CLI).
Migrations : génération du package d’application
Les migrations sont des fichiers Python qui constituent la source de vérité de votre package d’application. Au lieu d’écrire manuellement des schémas et des fichiers de configuration, vous définissez les schémas, les champs et le ranking via des migrations Python.
Fonctionnement :
- Créez des fichiers de migration dans
vespa_app/migrations/qui décrivent vos schémas et votre configuration - Exécutez
mistral-vespa migratepour valider toutes les migrations dans l’ordre - Le système de migration génère l’ensemble du package d’application en mémoire
- Le package est déployé sur votre cluster Vespa
Propriétés des migrations :
- Append-only — ajoutez de nouveaux fichiers pour chaque modification, ne modifiez jamais les fichiers existants
- Ordonnées — triées par préfixe de timestamp, exécutées séquentiellement à chaque déploiement
- Versionnées — la seule chose que vous poussez dans votre dépôt
- Idempotentes — sans effet de bord même en cas de réexécution
Cette approche vous permet de versionner et faire évoluer vos schémas comme n’importe quel code source, avec tout l’historique et la possibilité de revoir les modifications.
Schémas
Un schéma définit un type de document. Il déclare les champs contenus dans le document, la manière dont ils sont indexés et comment les résultats sont ordonnés. Chaque schéma produit un fichier .sd et un profil de requête dans le package d’application.
Une application peut contenir plusieurs schémas, chacun représentant un type de document différent (par exemple, articles, comments). Les noms doivent être uniques.
Mode "Recherche"
Chaque schéma fonctionne selon deux modes :
| Mode | Description |
|---|---|
SearchMode.INDEX | Recherche indexée classique — BM25, ANN/HNSW, ranking en deux phases |
SearchMode.STREAMING | Recherche en streaming — plus proche voisin exact, filtrage par attribut, ranking en une seule phase |
Champs
Les champs définissent les données qu'un document contient et la manière dont elles sont utilisées pour l'indexation et le ranking. Le plugin propose cinq types de champs :
| Type de champ | Utilisation | Indexation Vespa | Fonctions de ranking générées |
|---|---|---|---|
EmbeddingField | Vecteurs d'embedding pour la recherche sémantique | attribute + index HNSW | Distance, similarité cosinus |
TextField | Texte pour la recherche par mot-clé/BM25 | index + summary | BM25, correspondance champ |
StringField | Métadonnées stockées, non recherchables | attribute + summary | Aucune |
TimestampField | Ranking basé sur le temps (long) | attribute + summary | Fraîcheur, boost récence |
CountField | Ranking numérique (int) | attribute + summary | Normalisation, boost |
Les champs peuvent être à valeur unique ou multi-dimensionnels (tableaux). Par exemple, les embeddings par fragment et les fragments de texte sont des champs multi-dimensionnels.
Ensemble de champs par défaut
Le plugin génère un ensemble de champs par défaut qui inclut tous les champs TextField. Cet ensemble sert à déterminer sur quels champs la recherche s'effectue lors de l'utilisation de userQuery() dans YQL. Les autres types de champs sont exclus.
Profils de ranking
Le plugin génère quatre profils de ranking par schéma :
| Profil | Utilisation |
|---|---|
root | Profil de base incluant toutes les fonctions générées automatiquement et personnalisées |
match-only | Utilisé pour la phase de récupération, sans ranking appliqué |
weighted-rank1 | Phase 1 : combinaison linéaire des fonctions de phase 1 avec des poids configurables côté requête |
weighted-rank2 | Phase 1 + 2 : ajoute les fonctions de phase 2 sur la base de weighted-rank1 |
Ranking en plusieurs phases
Vespa classe les documents en plusieurs phases pour équilibrer rapidité et qualité :
- Première phase — appliquée à tous les documents correspondants. Doit être rapide. Utilise des fonctions type BM25, distance d'embedding, fraîcheur.
- Seconde phase — reclasse le top k des documents extraits en phase 1. Permet d'utiliser des fonctions plus complexes comme la correspondance champ, le score logarithmique ou des modèles ML.
- Phase globale (optionnel) — s'applique sur l'ensemble des résultats fusionnés dans le nœud conteneur.
Le plugin associe chaque fonction générée automatiquement à la phase la plus adaptée selon le type de champ.
Profils pondérés
Les profils weighted-rank1 et weighted-rank2 vous permettent d’ajuster le ranking à la requête en modifiant les poids des fonctions, sans changer le schéma.
Phase 1 : bm25_title_weight * bm25_title +
content_embedding_distance_weight * content_embedding_distance +
freshness_created_at_weight * freshness_created_at
Phase 2 : firstPhase +
match_title_weight * match_title +
log_freshness_created_at_weight * log_freshness_created_atTous les poids sont initialisés à 0. Il suffit d’attribuer une valeur non nulle à un ou plusieurs pour activer le ranking.
Profils de requête
Le plugin crée un profil de requête par schéma (nommé via default_query_profile_name, par défaut le nom du schéma). Il comprend :
- Une requête YQL pour la recherche hybride (si des embeddings sont présents) ou une recherche par mot-clé
- Le profil de ranking
weighted-rank2en valeur par défaut - Des champs de type « query » pour pondérer les fonctions
Pour plus d’informations, voir Profils de requête et la documentation Vespa sur les profils de requête.
Voir aussi
- Gérer les schémas : Création de schémas, champs et ranking via des migrations
- Gérer le ranking : Configurer le ranking à la requête