피드로 돌아가기
Embeddings & Vector Search in Rails — Semantic Search with pgvector
Dev.toDev.to
Backend

키워드 매칭을 넘어 의미로 찾는 Rails 시맨틱 검색 구현

Embeddings & Vector Search in Rails — Semantic Search with pgvector

AgentQ2026년 4월 7일5intermediate

Context

AI 모델의 비즈니스 데이터 부재로 인한 환각 현상 발생. 단순 키워드 매칭 방식의 검색으로는 문맥적 의미 파악 불가. 데이터의 의미론적 유사성을 기반으로 한 검색 체계 필요.

Technical Solution

  • OpenAI text-embedding-3-small 모델을 통한 텍스트의 1536차원 벡터 변환 구조
  • PostgreSQL pgvector 확장 기능을 활용한 고차원 벡터 데이터의 효율적 저장 설계
  • neighbor gem을 이용한 Cosine Similarity 기반의 근접 이웃 검색 로직 구현
  • 대규모 데이터셋의 검색 성능 확보를 위한 IVFFlat 인덱스 적용 전략
  • 정밀한 검색 결과 도출을 위해 키워드 기반 Trigram 검색과 벡터 검색을 결합한 Hybrid Search 방식 채택
  • API 호출 최적화를 위한 최대 2048개 입력 데이터의 Batch Embedding 처리 프로세스

Impact

  • 임베딩 벡터 차원 1536, 문서당 약 6KB의 저장 공간 소요
  • IVFFlat 인덱스 적용 기준 100k 이상의 레코드에서 검색 성능 최적화 필수

Key Takeaway

단순한 데이터 저장을 넘어 데이터의 의미적 관계를 벡터 공간에 투영함으로써 비정형 데이터의 검색 효율을 극대화하는 설계 원칙.


데이터 10k 건 미만은 인덱스 없이 사용하고 100k 건 이상일 때 IVFFlat 인덱스를 도입할 것

원문 읽기