> ## 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/ko/reference/engines/table-engines/mergetree-family/annindexes)
