menu icon

Exploiter Jina V5 pour le vector search dans OpenSearch

Vous souhaitez utiliser le nouveau modèle Jina V5 dans OpenSearch ? Ce guide vous accompagne pas à pas — du téléchargement et de l’empaquetage des poids ONNX jusqu’à l’enregistrement du modèle sans erreurs.

Exploiter Jina V5 pour le vector search dans OpenSearch

Table of Contents

  1. Introduction
  2. Téléchargement et préparation du modèle
  3. Upload vers OpenSearch
  4. Tester vos nouveaux embeddings
  5. Conclusion

1. Introduction

Si vous suivez l’évolution du domaine du vector search, vous avez probablement entendu parler des nouveaux modèles de Jina AI : v5-small et v5-nano. Malgré leurs noms modestes, ces modèles sont à la pointe de la technologie pour le semantic search, le text matching et la retrieval-augmented generation, et selon les derniers benchmarks d’Elastic, ils surpassent même E5.

Elastic considère ces modèles comme tellement avancés qu’ils encouragent fortement leur utilisation dans leur propre écosystème — ce qui n’est pas surprenant, surtout maintenant que l’équipe Jina a rejoint Elastic.

Mais que faire si vous utilisez OpenSearch ?

Comme ces modèles sont disponibles librement sur Hugging Face, vous n’êtes pas obligé de rester dans l’écosystème Elasticsearch pour en profiter.
Dans ce guide, nous allons parcourir l’ensemble du processus afin de montrer comment exécuter Jina v5 embeddings nativement dans OpenSearch.

2. Téléchargement et préparation du modèle

Pour exécuter Jina V5 dans OpenSearch, nous devons d’abord convertir le modèle au format ONNX.

Cependant, selon la page Hugging Face du modèle, Jina V5 fonctionne légèrement différemment des autres modèles. Au lieu d’un seul grand modèle polyvalent, Jina fournit plusieurs versions spécifiques à une tâche, où les adapters (les composants qui ajustent le modèle pour des tâches spécifiques) sont déjà fusionnés dans les weights.

Pour vector search, nous devons utiliser la version retrieval : jinaai/jina-embeddings-v5-text-small-retrieval.

Pour télécharger le modèle dans le bon format, nous pouvons utiliser la bibliothèque optimum.

from optimum.onnxruntime import ORTModelForFeatureExtraction
from transformers import AutoTokenizer

model_id = "jinaai/jina-embeddings-v5-text-small-retrieval"
save_dir = "jina_temp_onnx"

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = ORTModelForFeatureExtraction.from_pretrained(
    model_id,
    subfolder="onnx", 
    file_name="model.onnx",
    trust_remote_code=True,
)

tokenizer.save_pretrained(save_dir)
model.save_pretrained(save_dir)

Pour utiliser le modèle dans OpenSearch, vous devez regrouper les fichiers du modèle dans un zip avant de les uploader.

zip -r jina_temp_onnx.zip jina_temp_onnx

Le fichier zip doit contenir à la fois le tokenizer JSON et les poids du modèle.

Notez que les modèles modernes peuvent dépasser la limite de 2 GB pour un seul fichier ONNX. Dans ce cas, les poids sont stockés séparément dans un fichier appelé model.onnx_data.

Pour plus d’informations sur la gestion des grands modèles ONNX, consultez ce guide.

Enfin, il est nécessaire de calculer un SHA256 hash, que nous utiliserons lors de l’enregistrement du modèle. OpenSearch recalculera ce hash après avoir téléchargé le zip afin de vérifier que le fichier correspond exactement à celui que vous avez fourni.

shasum -a 256 jina-v5-small.zip

3. Upload vers OpenSearch

Pour enregistrer un modèle custom, OpenSearch doit pouvoir accéder au fichier ZIP via HTTP ou HTTPS.

Dans mon cas, comme je travaille en local, j’ai simplement démarré un serveur web temporaire avec la commande suivante :

python -m http.server 8000

Cela sert le répertoire courant sur http://localhost:8000, ce qui rend le fichier ZIP accessible à OpenSearch.

Si OpenSearch s’exécute dans un container Docker, gardez à l’esprit que le container ne peut pas accéder à votre machine hôte via localhost ou via l’adresse locale de l’hôte.

Une fois cela fait, il est temps d’ouvrir DevTools et d’enregistrer le modèle :

POST /_plugins/_ml/models/_register?deploy=true
{
  "name": "jinaai/jina-embeddings-v5-text-small-retrieval",
  "version": "1.0.0",
  "model_format": "ONNX",
  "function_name": "TEXT_EMBEDDING",
  "model_content_hash_value": "<YOUR_SHA256_HASH_HERE>",
  "url": "<YOUR URL>",
  "model_config": {
    "model_type": "qwen3",
    "embedding_dimension": 1024,
    "framework_type": "sentence_transformers", 
    "all_config": """{\"architectures\":[\"Qwen3Model\"],\"attention_bias\":false,\"attention_dropout\":0.0,\"bos_token_id\":151643,\"dtype\":\"bfloat16\",\"eos_token_id\":151645,\"head_dim\":128,\"hidden_act\":\"silu\",\"hidden_size\":1024,\"initializer_range\":0.02,\"intermediate_size\":3072,\"layer_types\":[\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\",\"full_attention\"],\"max_position_embeddings\":32768,\"max_window_layers\":28,\"model_type\":\"qwen3\",\"num_attention_heads\":16,\"num_hidden_layers\":28,\"num_key_value_heads\":8,\"pad_token_id\":null,\"rms_norm_eps\":1e-06,\"rope_parameters\":{\"rope_theta\":3500000,\"rope_type\":\"default\"},\"sliding_window\":null,\"task_names\":[\"retrieval\",\"text-matching\",\"clustering\",\"classification\"],\"tie_word_embeddings\":true,\"transformers_version\":\"5.1.0\",\"use_cache\":true,\"use_sliding_window\":false,\"vocab_size\":151936}"""
  }
}

Quelques mots sur cette commande :

  1. Embedding dimension correspond à la taille des vecteurs produits par le modèle (ici 1024).
  2. Function name (TEXT_EMBEDDING) indique que ce modèle générera des embeddings pour du texte.
  3. Model config contient à la fois des paramètres de haut niveau et la configuration complète du modèle.
  4. model_type et framework_type indiquent à OpenSearch quel type de modèle et quelle bibliothèque sont utilisés.
  5. all_config est un JSON dump complet de l’architecture du modèle et de ses hyperparameters, que vous pouvez trouver dans le fichier config.json du dossier du modèle téléchargé.

Une fois cela fait, pensez à utiliser le task ID présent dans la réponse. Cela permet :

  • de vérifier si la tâche est terminée, avec ou sans erreurs
  • de récupérer le model ID une fois le modèle correctement uploadé (il est aussi visible dans la page Machine Learning)

Pour récupérer le model ID depuis DevTools, exécutez :

GET /_plugins/_ml/tasks/<your_upload_task_id>

4. Tester vos embeddings

Une fois la tâche d’enregistrement terminée, il est temps de voir le modèle à l’œuvre.

Vous n’avez pas besoin d’indexer des milliers de documents pour vérifier que tout fonctionne. OpenSearch fournit un endpoint _predict qui permet de tester le modèle directement.

Envoyez simplement une phrase exemple au modèle.

POST /_plugins/_ml/models/<model_id>/_predict
{
  "text_docs": [
    "Jina V5 is running natively on OpenSearch!"
  ]
}

Comme nous avons configuré ce modèle comme une fonction TEXT_EMBEDDING avec l’architecture qwen3, OpenSearch gérera automatiquement la tokenization et le pooling.

Si tout est correctement configuré, vous recevrez une réponse contenant un vecteur 1024 dimension.

Vous pouvez maintenant utiliser votre modèle pour créer un ingest pipeline avec le text_embedding processor pour l’indexation, et interroger votre vector database avec des semantic queries.

5. Conclusion

En déployant avec succès Jina V5, nous avons montré qu’il n’est pas nécessaire d’être enfermé dans un écosystème spécifique pour accéder aux dernières avancées en vector search. Même si Elastic a fortement intégré ce modèle à la pointe de la technologie dans sa stack, la disponibilité des poids sur Hugging Face permet aux utilisateurs d’OpenSearch d’obtenir le même niveau de performance.

La clé réside dans le packaging. En regroupant correctement les split ONNX weights et en configurant l’architecture qwen3 dans OpenSearch, vous disposez désormais d’un moteur d’embeddings 1024 dimensions extrêmement puissant.

Cette configuration garantit que votre infrastructure de recherche reste à la pointe, prête pour des applications de semantic retrieval et de RAG à haute performance.

Vers le futur de la recherche avec OpenSearch

07/09/2025

La recherche évolue plus vite que jamais, et des technologies comme OpenSearch ouvrent la voie. Dans ce blog, nous explorerons les dernières fonctionnalités d’OpenSearch, telles que les agents et le Model Context Protocol, qui débloquent de nouveaux superpouvoirs pour construire la prochaine génération d’applications RAG.

Lire l'article

Connecter votre LLM à OpenSearch via des connecteurs.

07/05/2024

Récemment, OpenSearch a mis en œuvre les connecteurs, une fonctionnalité qui permet de connecter un modèle d'apprentissage automatique sans avoir besoin de le déployer internement sur le cluster. Dans cet article de blog, nous découvrirons comment utiliser les connecteurs et mettre en œuvre un RAG grâce à l'utilisation de connecteurs et d'agents.

Lire l'article

Bonjour OpenSearch Conference Europe 2024

06/05/2024

La première conférence OpenSearch en Europe se tiendra à Berlin en mai prochain et Adelean participera à cet événement. Cette page répertorie certaines de nos références et présentations OpenSearch que vous pourrez consulter pendant et après l'événement.

Lire l'article

Guide complet sur le RAG Open-Source

01/12/2023

Plongée dans le Retrieval-Augmented Generation (RAG). Dans cet article, nous explorons les concepts fondamentaux derrière le RAG, en mettant l'accent sur son rôle dans l'amélioration de la compréhension contextuelle et la synthèse d'informations. De plus, nous fournissons un guide pratique sur la mise en œuvre d'un système RAG en utilisant uniquement des outils open-source et des modèles de langage volumineux.

Lire l'article

L'Art de la Vectorisation d'Images - Un Guide avec OpenSearch

01/10/2023

BLIP-2 est un modèle qui combine les forces de la vision par ordinateur et des grands modèles de langage. Ce mélange puissant permet aux utilisateurs d'engager des conversations avec leurs propres images et de générer du contenu descriptif. Dans cet article, nous verrons comment tirer parti de BLIP-2 pour créer des descriptions d'images enrichies, suivies de leur indexation en tant que vecteurs dans Opensearch.

Lire l'article

NLP dans OpenSearch

18/06/2023

Un guide pratique sur l'importation et l'utilisation de modèles NLP dans OpenSearch pour l'analyse et l'inférence de texte dans vos flux de recherche et d'analyse.

Lire l'article