메인 콘텐츠로 건너뛰기
그렇습니다. ClickHouse로 벡터 검색을 수행할 수 있습니다. 보다 전문화된 벡터 데이터베이스 대신 벡터 검색에 ClickHouse를 사용할 때의 주요 이점은 다음과 같습니다.
  • 검색을 수행하기 전에 ClickHouse의 필터링과 전문 검색 기능을 활용해 데이터셋을 더 정교하게 추릴 수 있습니다.
  • 데이터셋에 대해 분석을 수행할 수 있습니다.
  • 기존 데이터에 대해 JOIN을 수행할 수 있습니다.
  • 데이터베이스를 또 하나 더 관리하면서 인프라를 복잡하게 만들 필요가 없습니다.
다음은 ClickHouse로 벡터 검색을 사용하는 방법을 간단히 설명하는 튜토리얼입니다.

1. 임베딩 생성

데이터(문서, 이미지 또는 구조화된 데이터)는 _임베딩_으로 변환해야 합니다. OpenAI Embeddings API 또는 오픈 소스 Python 라이브러리인 SentenceTransformers를 사용해 임베딩을 생성하는 것을 권장합니다. 임베딩은 데이터를 표현하는 대규모 부동소수점 수 배열이라고 생각하면 됩니다. 임베딩에 대해 자세히 알아보려면 OpenAI의 이 가이드를 참조하십시오.

2. 임베딩 저장하기

임베딩을 생성한 후에는 이를 ClickHouse에 저장해야 합니다. 각 임베딩은 별도의 행에 저장하며, 필터링, 집계 또는 분석에 사용할 메타데이터를 포함할 수 있습니다. 다음은 캡션이 있는 이미지를 저장할 수 있는 테이블 예시입니다:
CREATE TABLE images
(
	`_file` LowCardinality(String),
	`caption` String,
	`image_embedding` Array(Float32)
)
ENGINE = MergeTree;
데이터셋에서 개 사진을 찾고 싶다고 가정해 보겠습니다. cosineDistance와 같은 거리 함수를 사용해 개 이미지의 임베딩으로 관련 이미지를 검색할 수 있습니다:
SELECT
    _file,
	caption,
	cosineDistance(
        -- "입력" 강아지 사진의 임베딩
        [0.5736801028251648, 0.2516217529773712, ...,  -0.6825592517852783],
        image_embedding
    ) AS score
FROM images
ORDER BY score ASC
LIMIT 10
이 쿼리는 제공된 개 이미지와 가장 관련성이 높을 가능성이 있는 상위 10개 이미지의 _file 이름과 캡션을 반환합니다.

추가 참고 자료

ClickHouse를 사용한 벡터 검색에 관한 더 자세한 튜토리얼은 다음을 참조하십시오.
마지막 수정일 2026년 6월 10일