> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

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

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

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

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

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

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

<div id="1-create-embeddings">
  ## 1. 埋め込みベクトル を作成する
</div>

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

埋め込み は、データを表現する多数の浮動小数点数の配列だと考えることができます。埋め込みベクトル の詳細については、[OpenAI のこちらのガイドをご覧ください](https://platform.openai.com/docs/guides/embeddings/what-are-embeddings)。

<div id="2-store-the-embeddings">
  ## 2. 埋め込みベクトルを保存する
</div>

埋め込みベクトルを生成したら、それらを ClickHouse に保存する必要があります。各埋め込みベクトルは個別の行に保存し、フィルタリング、集計、分析に使用するメタデータを含めることもできます。以下は、キャプション付き画像を保存できるテーブルの例です。

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

<div id="3-search-for-related-embeddings">
  ## 3. 関連する埋め込みベクトルを検索する
</div>

データセット内の犬の画像を検索したいとします。`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`を返します。

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

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

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