> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Peut-on utiliser ClickHouse pour la recherche vectorielle ?

> Découvrez comment utiliser ClickHouse pour la recherche vectorielle, notamment pour stocker des embeddings et effectuer des recherches à l’aide de fonctions de distance comme la similarité cosinus.

{frontMatter.description}

<div id="clickhouse-for-vector-search">
  ## ClickHouse pour la recherche vectorielle !
</div>

Oui, ClickHouse prend en charge la recherche vectorielle.

Les principaux avantages de l’utilisation de ClickHouse pour la recherche vectorielle, par rapport à des bases de données vectorielles plus spécialisées, sont les suivants :

* Utiliser les fonctionnalités de filtrage et de recherche en texte intégral de ClickHouse pour affiner votre jeu de données avant d’effectuer une recherche.
* Effectuer des analyses sur vos jeux de données.
* Exécuter un `JOIN` avec vos données existantes.
* Pas besoin de gérer une base de données supplémentaire ni de complexifier votre infrastructure.

Voici un bref tutoriel sur l’utilisation de ClickHouse pour la recherche vectorielle.

<Steps>
  <Step title="Créer des embeddings">
    Vos données (documents, images ou données structurées) doivent être converties en *embeddings*. Nous vous recommandons de créer des embeddings à l’aide de l’[API OpenAI Embeddings](https://platform.openai.com/docs/api-reference/embeddings) ou de la bibliothèque Python open-source [SentenceTransformers](https://www.sbert.net/).

    Vous pouvez considérer un embedding comme un grand tableau de nombres à virgule flottante qui représente vos données. [Consultez ce guide d’OpenAI pour en savoir plus sur les embeddings](https://developers.openai.com/api/docs/guides/embeddings).
  </Step>

  <Step title="Stocker les embeddings">
    Une fois que vous avez généré des embeddings, vous devez les stocker dans ClickHouse. Chaque embedding doit être stocké dans une ligne distincte et peut inclure des métadonnées pour le filtrage, les agrégations ou l’analyse. Voici un exemple de table pouvant stocker des images avec des légendes :

    ```sql theme={null}
    CREATE TABLE images
    (
    	`_file` LowCardinality(String),
    	`caption` String,
    	`image_embedding` Array(Float32)
    )
    ENGINE = MergeTree;
    ```
  </Step>

  <Step title="Rechercher des embeddings associés">
    Supposons que vous souhaitiez rechercher des images de chiens dans votre jeu de données. Vous pouvez utiliser une fonction de distance comme `cosineDistance` pour utiliser l’embedding d’une image de chien et rechercher des images similaires :

    ```sql theme={null}
    SELECT
        _file,
    	caption,
    	cosineDistance(
            -- Un embedding de votre image de chien en entrée
            [0.5736801028251648, 0.2516217529773712, ...,  -0.6825592517852783],
            image_embedding
        ) AS score
    FROM images
    ORDER BY score ASC
    LIMIT 10
    ```

    Cette requête renvoie les valeurs de `_file` et `caption` des 10 images les plus susceptibles d’être liées à l’image de chien que vous avez fournie.
  </Step>
</Steps>

<div id="further-reading">
  ## Pour en savoir plus
</div>

Pour suivre un tutoriel plus détaillé sur la recherche vectorielle avec ClickHouse, consultez :

* [Recherche vectorielle exacte et approximative](/docs/fr/reference/engines/table-engines/mergetree-family/annindexes)
