TL;DR
의미 기반 임베딩 검색은 포괄적인 검색 신호를 제공했지만 제품 코드나 법조항처럼 정확한 키워드 매칭이 필요한 곳에서는 한계가 존재했다. Pinecone은 BM25 점수화와 Lucene 쿼리 문법을 텍스트 필드 수준에서 지원해 동일 인덱스에 텍스트 필드·밀집·희소 벡터·메타데이터를 함께 정의하고, 텍스트 매치로 후보군을 좁힌 뒤 임베딩 유사도로 재랭킹하는 워크플로를 퍼블릭 프리뷰로 제공했다. 현재는 하나의 점수화 유형만 한 번에 실행되므로 복합 점수 결합은 클라이언트 측 병합이 필요하고 스키마는 인덱스 생성 시 고정되어 기존 인덱스 변환은 불가하다. Python SDK 예제와 Colab 노트북, Bird Search 데모(약 2,079개 문서, Gemini Embedding 2 사용)가 제공되어 구현·검증을 시작할 수 있다.
빠른 이해
새로운 점
텍스트 필드(BM25) 필터로 후보를 좁힌 뒤 동일 인덱스에서 벡터 유사도로 재랭킹하는 단일 워크플로를 공개 프리뷰로 제공한 점
핵심 메커니즘
사용자 질의는 먼저 Lucene 기반 텍스트 매치(정확 구절/모든 토큰/임의 토큰)로 후보 문서를 필터링하고, 필터 통과 문서에 대해 동일 인덱스의 밀집 벡터 임베딩을 사용해 벡터 유사도로 재랭킹하여 최종 결과를 반환한다.
핵심 수치
- 지원 언어 수: 18- 텍스트 필드별 언어 설정으로 토크나이제이션·스테밍 적용
- 예시 임베딩 차원: 1536-dim- 문서 예시에서 사용된 질의 임베딩 차원
- Bird Search 데이터셋 크기: ~2,079- 북미 조류 위키피디아 문서 수(데모 사례)
섹션별 상세
서비스 배경과 필요성
- Full text search is now available in Pinecone, in Public Preview. — 게시 초반의 개요 문단
단일 인덱스와 스키마 구조
- Eighteen languages are supported for text fields, including language-specific tokenization and stemming. — 텍스트 필드 설명 문단에서 'Eighteen languages are supported' 문장
쿼리 실행 흐름과 점수화 방식
# Query: keyword search across title/body using Lucene query syntax (BM25 ranking)
index = pc.preview.index(name="articles-multi")
response = index.documents.search( namespace="errors", score_by=[ { "type": "query_string", "query": 'title:("error code 4092") OR body:("error code 4092")' } ], top_k=10, include_fields=["title", "body", "category"], )Lucene 문법을 사용해 title과 body 필드에서 BM25로 정렬하는 Python SDK 예시 코드이다.
# Filter by exact phrase first, then rank remaining docs by dense similarity
index = pc.preview.index(name="articles-multi")
query_vector = [...] # 1536-dim query embedding
response = index.documents.search( namespace="default", filter={ "$and": [ {"body": {"$match_phrase": "force majeure clause"}}, {"category": {"$eq": "legal"}} ] }, score_by=[ { "type": "dense_vector", "field": "embedding", "values": query_vector, } ], top_k=5, include_fields=["title", "body"], )키워드(정확 구절)로 후보를 좁힌 뒤 1536차원 임베딩으로 밀집 벡터 유사도로 재랭킹하는 워크플로 예시 코드이다.
실무 적용 요소와 공개 범위
- Within a single query in Public Preview, scoring operates on one type at a time and cross-modality score combination requires client-side merging. — 'What's supported in Public Preview' 단락
용어 해설
- BM25
- — BM25는 키워드 기반 문서 검색에서 사용되는 확률적 랭킹 함수로, 문서 길이와 용어 빈도를 보정해 질의와 문서 간의 정밀한 키워드 일치를 점수화한다. 단어 출현 빈도와 역문서빈도(IDF)를 결합해 각 문서의 점수를 계산하고, 이를 통해 키워드 매칭 중심의 정밀한 검색 결과를 제공한다. 검색에서 정확한 구절이나 식별자(예: 에러 코드, 법조항)를 찾아야 할 때 벡터 유사도와 보완적으로 사용된다.
- Lucene Query Syntax
- — Lucene Query Syntax는 복합 조건·필드 지정·구문 검색을 허용하는 텍스트 쿼리 표기법으로, 필드별 검색, 부울 연산자, 구문 검색 등을 표현할 수 있어 정밀한 키워드 검색이 가능하다. 이 문법을 통해 title:(), field-specific OR/AND, 구문 검색 등 복잡한 필터를 구성하여 BM25 기반 점수 산출에 입력으로 사용할 수 있다. 검색 시스템에서 정밀 조건으로 후보군을 좁히는 용도로 중요하다.
- Stemming
- — Stemming은 단어를 어근 형태로 환원해 형태 변이를 통합 검색하는 토큰화 기법으로, 예를 들어 'running'과 'runs'를 'run'으로 줄여 동일 질의에 매칭시키는 역할을 한다. 인덱스 생성 시 언어별 토크나이저와 함께 적용되어 검색 일관성을 높이며, 다국어 환경에서는 언어별 규칙에 따라 다른 형태소 처리를 따른다. 키워드 기반 정밀 검색의 재현성과 일관성 확보에 기여한다.
- Dense Vector
- — Dense Vector는 문장이나 문서의 의미를 연속값 벡터로 표현한 임베딩으로, 의미 기반 유사도 검색에서 코사인 유사도나 내적을 통해 문서 간 의미적 관련도를 계산하는 데 사용된다. 질의는 임베딩으로 변환되어 벡터 공간에서 근접한 문서들을 랭킹하며, 키워드 기반 필터와 결합해 정밀도와 포괄성 사이 균형을 맞춘다. 벡터 차원 수(예: 1536-dim)는 임베딩 모델에 따라 정해진다.
- Index Schema
- — Index Schema는 인덱스 생성 시 텍스트 필드, 밀집/희소 벡터, 메타데이터 등 각 필드의 타입과 언어·토크나이징 규칙을 고정하는 정의이며, 스키마 고정 시 기존 인덱스에 대해 동적 변경이 불가하다. 스키마에는 각 텍스트 필드의 언어 설정, BM25 점수 적용 여부, 필터 가능성 등이 포함되어 쿼리 실행 시 처리 경로를 결정한다. 스키마 변경 가능성(mutable schema)은 향후 기능으로 예고되어 있다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.
