Référence des helpers utilisés dans les migrations. Tous les helpers sont importés depuis mistralai.search.toolkit.plugins.vespa.migration et appelés depuis la méthode migrate() d'une migration.

from mistralai.search.toolkit.plugins.vespa.migration import (
    VespaMigration,
    set_app_name,
    create_schema,
    add_field,
    add_query_profiles,
)
Configuration de l'application

Configuration de l'application

set_app_name

def set_app_name(app_name: str) -> None

Définissez le nom de l'application pour l'exécution de la migration. Obligatoire dans la première migration. Ne doit contenir que des lettres minuscules (a-z).

set_content_id

def set_content_id(content_id: str) -> None

Remplacez l'id du cluster de contenu utilisé dans services.xml (par défaut, le nom de l'application). Utilisez cette option lorsque le cluster déployé a été créé à l'origine avec un id différent. Sinon, Vespa traite un changement de nom comme une suppression suivie d'une recréation, ce qui détruit tous les documents stockés.

allow_schema_removal

def allow_schema_removal(until: str) -> None

Indiquez qu'une migration supprime intentionnellement un ou plusieurs schémas. Vespa rejette les suppressions de schémas par défaut pour protéger les données ; cette opération écrit un fichier validation-overrides.xml qui autorise la suppression jusqu'à until (une date ISO "YYYY-MM-DD"). Choisissez une date une ou deux semaines après votre fenêtre de déploiement.

set_distribute_across_groups

def set_distribute_across_groups(value: bool) -> None
Avertissement

Obsolète. Hook de compatibilité pour l'autodécouverte Kubernetes. Pour les nouveaux déploiements, définissez explicitement les groupes dans le fichier de topologie.

Créer des schémas

Créer des schémas

create_schema

def create_schema(
    name: str,
    mode: SearchMode,
    indexing_mode: IndexingMode,
    embedding_model: EmbeddingModel | MistralEmbeddingPreset | None = None,
    embedding_dimensions: int | None = None,
    fields: list[FieldDefinition] | None = None,
    custom_functions: list[FunctionWithInputs] | None = None,
    default_query_profile_name: str | None = None,
    top_chunks: int | None = None,
    id_field: str | None = None,
    content_cluster: str = "content",
) -> None

Créez un schéma avec un mode d'indexation explicite. C'est la méthode recommandée pour définir un schéma.

ParamètreTypeValeur par défautDescription
namestr(obligatoire)Nom du type de document (lettres minuscules et traits de soulignement uniquement)
modeSearchMode(obligatoire)INDEX ou STREAMING
indexing_modeIndexingMode(obligatoire)Disposition du document : DOCUMENT_PER_CHUNK (recommandé) ou SINGLE_DOCUMENT (hérité, obsolète)
embedding_modelEmbeddingModel | MistralEmbeddingPreset | NoneNoneModèle d'embedding (dimensions, type de données, métrique de distance) appliqué à tous les champs d'embedding. Obligatoire sauf si vous fournissez le paramètre déprécié embedding_dimensions. Transmettez un preset pour utiliser ses valeurs par défaut, ou un MistralEmbeddingModel ou CustomEmbeddingModel. Consultez Modèles d'embedding.
embedding_dimensionsint | NoneNoneObsolète. Utilisez plutôt embedding_model. Si ce paramètre est défini, construit un CustomEmbeddingModel(name="unknown") avec ce nombre de dimensions. Passer à la fois embedding_model et embedding_dimensions lève ValueError
fieldslist[FieldDefinition] | NoneNoneChamps ajoutés aux valeurs par défaut du mode d'indexation. Avec DOCUMENT_PER_CHUNK, les champs standard de fragment sont injectés automatiquement ; SINGLE_DOCUMENT nécessite au moins un champ
custom_functionslist[FunctionWithInputs] | NoneNoneFonctions de classement personnalisées (voir Gérer le classement)
default_query_profile_namestr | NoneNoneNom du profil de requête généré automatiquement. Par défaut, utilise le nom du schéma
top_chunksint | NoneNoneSINGLE_DOCUMENT uniquement. Nombre de fragments principaux à sélectionner. Rejeté avec DOCUMENT_PER_CHUNK.
id_fieldstr | NoneNoneSINGLE_DOCUMENT uniquement. Obsolète. Rejeté avec DOCUMENT_PER_CHUNK (l'identité du fragment est toujours id).
content_clusterstr"content"Cluster de contenu Vespa qui contient les documents de ce schéma

create_default_schema

Avertissement

Obsolète. Supprimé avant la version 1.0.0. Le helper hérité pour les schémas SINGLE_DOCUMENT prend schema_version et additional_fields au lieu de indexing_mode et fields. Utilisez plutôt create_schema(..., indexing_mode=...).

Énumérations

Énumérations

Les deux sont importées depuis mistralai.search.toolkit.plugins.vespa.app.schemas.app.

SearchMode

ValeurDescription
SearchMode.INDEXRecherche indexée traditionnelle : BM25, ANN/HNSW, classement en deux phases
SearchMode.STREAMINGRecherche en streaming : plus proche voisin exact, filtrage par attribut, classement en une seule phase

IndexingMode

ValeurDescription
IndexingMode.DOCUMENT_PER_CHUNKRecommandé. Un document Vespa par fragment, adressable individuellement par son id déterministe
IndexingMode.SINGLE_DOCUMENTHérité : un document Vespa par source, fragments regroupés sous forme de tableaux. Obsolète. Supprimé avant la version 1.0.0.
Types de champs

Types de champs

Les champs sont déclarés avec FieldDefinition, importé depuis mistralai.search.toolkit.plugins.vespa.app.schemas.app, puis passés à create_schema(fields=[...]) ou add_field(...). Définissez multi_dimensional=True (lorsque c'est pris en charge) pour transformer un champ en tableau.

Type de champObjectifUtilisé dans la correspondance des requêtesGénère des fonctions de classement
EmbeddingFieldEmbeddings vectoriels pour la recherche sémantiqueOui (ANN/HNSW)Distance, similarité cosinus
TextFieldTexte pour la recherche par mots-clés/BM25OuiBM25, correspondance de champ
StringFieldMétadonnées stockées, non utilisées pour la correspondanceNonAucune
TimestampFieldClassement basé sur le tempsNonFraîcheur, récence
CountFieldValeur numérique utilisée pour le classementNonNormalisation, boost
IntFieldEntier stocké, non classéNonAucune
BoolFieldBooléen stocké, non classéNonAucune
LanguageFieldÉtiquette de langue par document (RFC 3066)Non (filtre)Aucune

EmbeddingField

FieldDefinition.EmbeddingField(name: str, multi_dimensional: bool = False)

Embeddings vectoriels indexés avec HNSW. La dimension du tenseur et la métrique de distance sont dérivées du embedding_model du schéma. Définissez multi_dimensional=True pour un tableau d'embeddings (par exemple par fragment).

TextField

FieldDefinition.TextField(
    name: str,
    multi_dimensional: bool = False,
    summary: SummaryDefinition = SummaryDefinition(),
)

Texte tokenisé comparé à la requête utilisateur (BM25). Inclus dans le fieldset par défaut. summary contrôle le rendu du champ dans les résultats.

StringField

FieldDefinition.StringField(
    name: str,
    multi_dimensional: bool = False,
    fast_search: bool = False,
    match: MatchDefinition | None = None,
    summary: SummaryDefinition | None = SummaryDefinition(),
    attribute: bool = True,
)

Métadonnées stockées qui ne sont pas comparées à la requête (à utiliser pour les filtres, ids, tags). fast_search construit un index d'attribut dédié (plus de mémoire/CPU, recherches plus rapides) ; match définit un schéma de correspondance explicite ; attribute=False exclut la valeur des attributs en mémoire.

TimestampField

FieldDefinition.TimestampField(name: str, type: Literal["long", "int"] = "long")

Timestamp numérique utilisé pour les fonctions de classement par fraîcheur et récence.

CountField

FieldDefinition.CountField(name: str)

Compteur entier qui génère des fonctions de classement de normalisation et de boost. Pour un entier sur lequel vous ne voulez pas classer, utilisez IntField.

IntField

FieldDefinition.IntField(
    name: str,
    multi_dimensional: bool = False,
    summary: SummaryDefinition = SummaryDefinition(),
)

Entier stocké, non utilisé pour le classement ni pour la correspondance.

BoolField

FieldDefinition.BoolField(name: str, fast_search: bool = False)

Booléen stocké, non utilisé pour le classement ni pour la correspondance. Définissez fast_search=True pour émettre attribute { fast-search }, ce qui permet d'utiliser le champ dans le filtrage au moment de la requête (par exemple un indicateur is_public).

LanguageField

FieldDefinition.LanguageField(name: str = "language")

Définit la langue du document (une étiquette RFC 3066) et crée un index afin que les documents puissent être filtrés par langue.

Faire évoluer les schémas

Faire évoluer les schémas

Ajoutez des éléments à un schéma existant dans une migration ultérieure. Chaque appel lève ValueError si le schéma nommé n'existe pas.

add_field

def add_field(schema_name: str, field: FieldDefinition) -> None

Ajoutez un seul champ à un schéma existant.

add_custom_functions

def add_custom_functions(schema_name: str, functions: list[FunctionWithInputs]) -> None

Ajoutez des fonctions de classement personnalisées à un schéma existant.

add_query_profiles

def add_query_profiles(query_profiles: list[QueryProfile]) -> None

Ajoutez ou mettez à jour des profils de requête sur l'application. Voir Gérer le classement.

add_schema_rank_profiles

def add_schema_rank_profiles(schema_name: str, rank_profiles: list[Path]) -> None

Joignez des fichiers de profil de classement personnalisés à un schéma.

add_schema_model_files

def add_schema_model_files(schema_name: str, model_files: list[Path]) -> None

Joignez des fichiers de modèle ML à un schéma.

add_schema_custom_document_summary

def add_schema_custom_document_summary(schema_name: str, custom_document_summary: DocumentSummary) -> None

Joignez un résumé de document personnalisé à un schéma.

VespaMigration

VespaMigration

Classe de base de chaque migration. Créez-en une sous-classe et implémentez migrate(), en appelant les helpers ci-dessus :

from mistralai.search.toolkit.embedding import MistralEmbeddingPreset
from mistralai.search.toolkit.plugins.vespa.app.schemas.app import IndexingMode, SearchMode
from mistralai.search.toolkit.plugins.vespa.migration import VespaMigration, create_schema, set_app_name


class InitialSchema(VespaMigration):
    def migrate(self) -> None:
        set_app_name("myapp")
        create_schema(
            name="articles",
            mode=SearchMode.INDEX,
            embedding_model=MistralEmbeddingPreset.MISTRAL_EMBED_DIM_1024,
            indexing_mode=IndexingMode.DOCUMENT_PER_CHUNK,
        )
Modèles d'embedding

Modèles d'embedding

create_schema(embedding_model=...) accepte un EmbeddingModel qui décrit les dimensions, le type de données et la métrique de distance des vecteurs stockés dans l’index. Transmettez un MistralEmbeddingPreset pour utiliser ses valeurs par défaut, ou directement un MistralEmbeddingModel ou CustomEmbeddingModel.

from mistralai.search.toolkit.embedding import MistralEmbeddingPreset

create_schema(
    ...,
    embedding_model=MistralEmbeddingPreset.MISTRAL_EMBED_DIM_1024,  # built for you
)

Pour la distinction entre MistralEmbeddingModel et CustomEmbeddingModel, les presets et la relation entre le modèle de schéma et l'embedder de votre pipeline, voir Modèle d'embedding.

Voir aussi

Voir aussi