> ## 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.

# ClickHouseはベクトル検索に使えますか？

> 埋め込みベクトルの保存や、コサイン類似度などの距離関数を使った検索を含め、ClickHouseでベクトル検索を行う方法を学びます。

{frontMatter.description}

<div id="clickhouse-for-vector-search">
  ## ベクトル検索に ClickHouse を使おう！
</div>

はい、ClickHouse はベクトル検索に対応しています。

より特化したベクトルデータベースと比べて、ベクトル検索に ClickHouse を使う主な利点は次のとおりです。

* 検索前に、ClickHouse のフィルタリング機能や全文検索機能でデータセットを絞り込めます。
* データセットに対して分析を実行できます。
* 既存のデータに対して `JOIN` を実行できます。
* 新たなデータベースを別途管理して、インフラストラクチャを複雑にする必要がありません。

以下では、ベクトル検索に ClickHouse を使う方法を簡単なチュートリアルで紹介します。

<Steps>
  <Step title="埋め込みを作成する">
    データ (ドキュメント、イメージ、または構造化データ) は、*埋め込み* に変換する必要があります。埋め込みの作成には、[OpenAI Embeddings API](https://platform.openai.com/docs/api-reference/embeddings) またはオープンソースの Python ライブラリ [SentenceTransformers](https://www.sbert.net/) を使用することを推奨します。

    埋め込みは、データを表す多数の浮動小数点数の配列と考えることができます。詳しくは、[埋め込みについて詳しく学べる OpenAI のガイド](https://developers.openai.com/api/docs/guides/embeddings) を参照してください。
  </Step>

  <Step title="埋め込みを保存する">
    埋め込みを生成したら、それらを ClickHouse に保存する必要があります。各埋め込みは個別の行に保存し、フィルタリング、集計、分析のためのメタデータを含めることができます。以下は、キャプション付きのイメージを保存できるテーブルの例です。

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

  <Step title="関連する埋め込みを検索する">
    データセット内で犬の写真を検索したいとします。`cosineDistance` のような距離関数を使えば、犬のイメージの埋め込みを使って、関連するイメージを検索できます。

    ```sql theme={null}
    SELECT
        _file,
    	caption,
    	cosineDistance(
            -- 入力した犬の写真の埋め込み
            [0.5736801028251648, 0.2516217529773712, ...,  -0.6825592517852783],
            image_embedding
        ) AS score
    FROM images
    ORDER BY score ASC
    LIMIT 10
    ```

    このクエリは、指定した犬のイメージに関連している可能性が最も高い上位 10 件のイメージについて、`_file` 名と `caption` を返します。
  </Step>
</Steps>

<div id="further-reading">
  ## 参考資料
</div>

ClickHouse を使用したベクトル検索の詳細なチュートリアルについては、以下を参照してください。

* [厳密ベクトル検索と近似ベクトル検索](/docs/ja/reference/engines/table-engines/mergetree-family/annindexes)
