오픈소스 인사이트
home
오픈소스 기술 동향
home
🙋‍♂️

Elasticsearch & JINA embedding Model 소개

검색 정확도를 한 단계 더 끌어올리고 싶은데, 키워드 매칭만으로는 한계를 느끼신 적 없으신가요?
이번 글에서는 많이들 익숙한 Elasticsearch 에, 최근 주목받는 JINA Embedding Model 을 결합해
더 “똑똑한 검색”을 만드는 방법을 소개해 보려고 합니다.
시맨틱 임베딩 모델 (Semantic embedding models)의 개념과 특징,
JINA Embbedding 모델의 빠른 적용을 위한 주요 인사이트를 제안드립니다!

개요

Elasticsearch가 개방형 추론 API(Open Inference API)를 통해 Jina AI의 최첨단 모델을 기본 기능으로 탑재했습니다. 이번 통합은 단순한 기능 추가를 넘어서, Jina AI의 모델을 통해 데이터 처리와 검색 품질 향상이 가능합니다.
이제 별도의 MLOps 파이프라인 구축 없이도 Jina AI의 8K 장문 임베딩(Embedding)과 정밀한 리랭킹(Reranking) 모델을 Elasticsearch 내부에서 직접 구동할 수 있습니다. 이는 RAG(검색 증강 생성) 시스템구축의 복잡성을 획기적으로 낮추고, 시맨틱 검색의 정확도를 극대화할 수 있는 가장 효율적인 방법입니다.
Jina AI 기능은 현재 Elastic cloud serverless에서 이용 가능하며, jina-embeddings-v3와 jina-reranker-v2-base-multilingual 등의 모델들을 지원합니다.
Elastic 권장 버전 및 라이선스 : 8.18 이상,  Enterprise 라이선스 사용

1. 시맨틱 임베딩 모델 (Semantic embedding models)

"단순 키워드 매칭을 넘어, 문맥을 이해하는 벡터 검색의 시작"
핵심은 Jina AI의 임베딩 모델이 텍스트의 의미를 어떻게 고차원 벡터로 변환하여 검색의 질을 높이는지에 있습니다.
긴 문맥 처리 능력 (Long-Context Mastery): Jina Embeddings v2 모델의 가장 큰 차별점은 최대 8,192 토큰의 시퀀스 길이를 지원한다는 것입니다. 이는 일반적인 모델(약 512~1024 토큰)보다 훨씬 길어, 법률 문서나 기술 매뉴얼 같은 긴 텍스트도 잘리지 않고 온전하게 의미를 압축하여 벡터화할 수 있습니다.
다국어 및 고성능: 영어뿐만 아니라 다국어 데이터에서도 뛰어난 성능을 발휘하며, 텍스트를 dense_vector(밀집 벡터)로 변환해 Elasticsearch의 kNN(최근접 이웃) 검색 기능을 극대화합니다.
Elasticsearch 통합: _inference API를 통해 모델을 등록하고 인제스트 파이프라인(Ingest Pipeline)에 연결하면, 데이터가 색인될 때 자동으로 벡터가 생성되어 저장됩니다.
Multimodal 임베딩 & Multi vector 지원
Matryoshka Representation Learning과 비대칭 검색(Asymmetric retrieval)

1) 양자화(Quantization) vs Matryoshka(MRL) 비교

구분
양자화 (Quantization)
Matryoshka 표현 학습 (MRL)
핵심 개념
각 차원의 정밀도(비트 수)를 줄임
전체 차원의 개수를 선택적으로 줄임
작동 원리
32비트 소수(Float32)를 8비트 정수(Int8)나 1비트(Binary)로 변환
벡터의 앞부분에 중요 정보를 몰아넣어 뒷부분을 잘라내도 성능 유지
적용 시점
모델 학습 후 또는 인덱싱 단계 (Post-processing)
모델 학습 단계에서 전용 손실 함수로 학습 필요
용량 최적화
개별 숫자의 크기를 줄임 (예: 4바이트 → 1바이트)
숫자의 개수 자체를 줄임 (예: 1024개 → 128개)
속도 향상
연산 정밀도가 낮아져 CPU/GPU 연산 속도 증가
데이터 전송량 및 비교 연산 횟수 자체가 감소
유연성
한 번 변환하면 고정됨 (주로 인덱스 전체 적용)
검색 시점에 64, 128, 512 등 원하는 길이로 즉시 절단 가능
대표 예시
OpenAI int8, Cohere binary, Lucene int8
Jina v3, OpenAI text-embedding-3, Google Gemma

1-1) 양자화 (Quantization): "숫자의 다이어트"

양자화는 마치 고화질 사진을 용량을 줄이기 위해 JPEG 화질을 낮추는 것과 비슷합니다.
특징: 벡터의 차원 수(길이)는 그대로 유지하되, 각 칸에 들어가는 숫자를 덜 정밀하게 표현합니다.
장점: 거의 모든 기존 임베딩 모델에 사후 적용이 가능합니다. 특히 Binary Quantization을 사용하면 용량을 32배까지 줄일 수 있습니다.

1-2) Matryoshka 표현 학습 (MRL): "중요 정보 전진 배치"

러시아 인형(마트료시카)처럼 큰 벡터 안에 작은 핵심 벡터가 포함된 구조입니다.
특징: 모델이 학습될 때부터 "앞쪽 128차원만 봐도 전체 의미의 90%를 알 수 있게 해라"라는 명령을 받습니다.
장점: 저장 공간이 부족하면 뒤쪽 차원을 그냥 버리면 됩니다. 별도의 변환 과정 없이 **슬라이싱(Slicing)**만으로 성능과 비용의 타협점을 찾을 수 있습니다.

2) Jina 임베딩 대표 모델

모델 시리즈
출시 시점 (년-월)
라이선스
상업적 이용가능 여부
주요 특징
Jina Embeddings v4
2025년 6월
Qwen Research License / CC-BY-NC-SA 4.0
X (비상업용/연구용)
최신 모델. 멀티모달(텍스트+이미지), 32K 컨텍스트, 3.8B 파라미터
Jina Embeddings v3
2024년 9월
CC BY-NC 4.0
X (비상업용/연구용)
다국어 특화, Task LoRA (검색/분류 등 모드 선택), Matryoshka 지원
Jina CLIP v2
2024년 11월
CC BY-NC 4.0
X (비상업용/연구용)
텍스트와 이미지 간의 교차 검색 성능 대폭 강화
Jina ColBERT v2
2024년 8월
CC BY-NC 4.0
X (비상업용/연구용)
Late Interaction 방식, 다국어 지원 및 고성능 검색
Jina CLIP v1
2024년 6월
Apache 2.0
O
첫 번째 멀티모달 임베딩 모델
Jina Embeddings v2 (Code)
2024년 2월
Apache 2.0
O
30개 이상의 프로그래밍 언어 및 코드 검색 최적화
Jina Embeddings v2 (Multilingual)
2024년 1월
Apache 2.0
O
독일어(DE), 중국어(ZH) 등 언어별 최적화 버전 순차 출시
Jina Embeddings v2 (English)
2023년 10월
Apache 2.0
O
세계 최초 8K 컨텍스트 지원 오픈소스 모델로 큰 반향

2. Reranking models

"검색 결과의 정밀도를 극대화하는 2단계 검증 시스템"
Reranking models는 “이미 어느 정도 후보로 뽑힌 결과 리스트”를 쿼리와 함께 넣고, 진짜로 사용자가 원하는 순서로 다시 정렬해 주는 모델입니다.
Multimodal/TEXT 전용 Reranker
jina-reranker-m0: 멀티모달 재랭커로, 쿼리 1개 + 후보 1개를 받아 점수 하나를 출력합니다.
PDF, 스캔, 스크린샷, 슬라이드 등 “시각 문서” 검색에서 최고 수준 성능을 보이며, 총 입력(쿼리+후보)을 약 10k 토큰까지 처리할 수 있습니다.
jina-reranker-v3: 텍스트 전용 재랭커로, 쿼리 1개 + 최대 64개 후보를 한 번에 받아 순서 전체를 반환합니다.
131k 토큰까지 컨텍스트를 처리할 수 있어, 많은 후보를 한 번에 재랭킹할 때 유리합니다.
jina-reranker-v2-base-multilingual : 작은 다국어 재랭커로, 일반 텍스트 재랭킹 외에 SQL 테이블/함수 선택 등 에이전트·툴 호출 시나리오에 맞게 설계되어 있습니다.
사용 패턴
“벡터 검색이나 BM25 → 상위 k개 후보 → Reranker로 최종 정렬”이라는 2단 구조로, 검색 품질과 비용·레이턴시 사이에서 균형을 맞추도록 합니다.
서로 다른 인덱스·시스템에서 온 결과를 한데 섞어 정렬하는 하이브리드/페더레이티드 검색에도 특히 유용합니다.

3. 소규모 생성형 언어 모델 (Small generative language models)

"효율적인 생성형 AI 애플리케이션 구축을 위한 최적의 기반"
원문은 주로 임베딩과 리랭킹을 다루지만, 이 모든 기술의 최종 목적지는 효율적인 생성형 AI(Generative AI) 시스템 구축입니다. Jina AI의 모델들은 거대한 LLM 없이도, 혹은 소형 모델과 결합하여 강력한 성능을 냅니다.
비용 효율적인 아키텍처: 수천억 개의 파라미터를 가진 거대 모델을 파인튜닝(Fine-tuning)하는 대신, Jina의 임베딩과 리랭커를 사용하여 '관련 정보'를 정확히 주입하는 방식(RAG)을 택합니다. 이를 통해 더 작고 빠른 생성 모델(Small Generative Models)을 사용하더라도 매우 똑똑하고 정확한 답변을 얻을 수 있습니다.
맥락 윈도우의 효율적 사용: 앞서 언급한 리랭킹 과정을 거치면, 생성형 모델에 입력되는 프롬프트(Prompt)의 낭비를 줄일 수 있습니다. 불필요한 정보는 버리고 핵심 정보만 입력하므로, 토큰 비용은 줄이고 처리 속도는 빨라집니다.
Elasticsearch가 곧 AI 플랫폼: 결과적으로 Elasticsearch는 단순 저장소를 넘어, Jina AI 모델을 통해 데이터를 이해하고(Embedding), 정제하여(Reranking), 생성형 모델에 최적의 연료를 공급하는 통합 AI 플랫폼 역할을 수행하게 됩니다.

4. JINA 임베딩 모델 특장점 요약 (다른 임베딩 모델과 비교)

구분
Jina Embeddings (v3/v4)
OpenAI (text-3-large)
Cohere (v4)
Open Source (BGE-M3/Qwen3)
최대 컨텍스트
8K (v3) / 32K (v4)
8K
4K
512 ~ 8K (Qwen3 기준)
차원수 (Dim)
1,024 (Matryoshka 지원)
3,072 (Truncation 지원)
1,024
1,024 ~ 4,096
특화 기능
Task 전용 어댑터(LoRA)
범용성, 브랜드 신뢰도
RAG/검색 최적화
완전한 데이터 프라이버시
Elastic 연동
EIS(Inference Service) 내장
Inference API 연동
Inference API 연동
직접 배포 (Hugging Face)
주요 장점
다국어 성능, 가성비, 유연성
압도적인 에코시스템
검색 품질 및 속도
비용 무료 (인프라 제외)
1) Task-Specific LoRA 어댑터
Jina v3 이상 모델은 하나의 모델 내에 LoRA(Low-Rank Adaptation) 어댑터를 포함하고 있습니다.
사용자는 검색(retrieval), 분류(classification), 군집화(clustering) 등 목적에 맞는 '모드'를 선택할 수 있어, 일반적인 범용 모델보다 특정 작업에서 훨씬 높은 정확도를 보여줍니다.
2) Matryoshka Representation Learning (MRL)
이 기술은 임베딩의 앞부분에 핵심 정보를 압축하여 저장하는 방식입니다.
Elasticsearch 이점: 1,024차원의 벡터를 성능 저하를 최소화하면서 128이나 64차원으로 줄여서 저장할 수 있습니다.
이는 벡터 검색 시 메모리(RAM) 사용량을 80% 이상 절감하고 검색 속도를 비약적으로 높여줍니다.
3) 긴 컨텍스트 및 다국어 지원 (한국어 포함)
Jina v4는 최대 32,768 토큰의 컨텍스트를 지원하여 긴 문서(법률, 논문 등)를 쪼개지 않고도 정교하게 임베딩할 수 있습니다.
특히 한국어를 포함한 89개 이상의 언어에서 글로벌 벤치마크(MTEB) 최상위권을 유지하고 있습니다.
4) Elasticsearch에서의 활용
비용과 성능의 균형: OpenAI의 인지도가 높지만, 대량의 문서를 인덱싱해야 하는 Elasticsearch 환경에서는 비용이 1/3 수준이면서 성능은 대등하거나 더 높은 Jina가 경제적입니다.
멀티모달 검색 (v4): 최신 Jina v4 모델은 텍스트뿐만 아니라 이미지, 도표, 차트까지 하나의 벡터 공간에 임베딩할 수 있어, 이미지 검색이나 시각적 문서 검색(Visual RAG)을 구현할 때 매우 유리합니다.

5. JINA 한국어 임베딩 모델 리더보드 순위

참조 사이트 : https://huggingface.co/spaces/mteb/leaderboard (필터조건 : retrieval, kor)
라이선스 관련 : Jina-embeddings-v3 → cc-by-nc-4.0 사용
상업적 이용 금지: 저작물을 유료로 판매하거나, 광고 수익이 발생하는 웹사이트에 게재하거나, 유료 서비스의 핵심 부품으로 사용하는 행위 등이 제한됩니다.
개인적인 공부나, 연구에만 사용 가능 (비상업적 용도로만 사용가능)

5. JINA Embeddings 모델 설정하기

단계 1: 추론 엔드포인트 생성

Kibana의 Dev Tools나 curl을 사용하여 다음 명령어를 실행합니다. 이는 Elasticsearch에 Jina AI의 임베딩 모델을 등록하는 과정입니다.
PUT _inference/text_embedding/jina-embeddings-test { "service": "jina", "service_settings": { "api_key": "<여기에_JINA_API_KEY_입력>", "model_id": "jina-embeddings-v2-base-en" } }
Plain Text
복사

단계 2: 인덱스 매핑 설정

이제 데이터를 저장할 인덱스를 생성하고, dense_vector 필드를 정의합니다.
PUT jina-embedding-index { "mappings": { "properties": { "content": { "type": "text" }, "content_embedding": { "type": "dense_vector", "dims": 768, "element_type": "float", "index": true, "similarity": "cosine" } } } }
Plain Text
복사
dims: 768은 jina-embeddings-v2-base-en 모델의 출력 차원입니다.

단계 3: 인제스트 파이프라인 생성 (자동 임베딩)

문서가 인덱싱될 때 자동으로 임베딩을 생성하도록 파이프라인을 구성합니다.
PUT _ingest/pipeline/jina-embedding-pipeline { "processors": [ { "inference": { "model_id": "jina-embeddings-test", "input_output": [ { "input_field": "content", "output_field": "content_embedding" } ] } } ] }
Plain Text
복사

단계 4: 데이터 인덱싱 및 검색

이제 파이프라인을 사용하여 데이터를 넣고 검색해 봅니다.
데이터 입력:
POST jina-embedding-index/_doc?pipeline=jina-embedding-pipeline { "content": "Elasticsearch와 Jina AI의 통합은 검색 경험을 혁신합니다." }
Plain Text
복사
벡터 검색 (kNN Search):
GET jina-embedding-index/_search { "knn": { "field": "content_embedding", "query_vector_builder": { "text_embedding": { "model_id": "jina-embeddings-test", "model_text": "Elasticsearch Jina AI 통합" } }, "k": 10, "num_candidates": 100 } }
Plain Text
복사

Jina Reranker 모델 설정하기

임베딩 검색(1단계 검색) 후, 리랭커를 사용하여 결과의 품질을 높일 수 있습니다. 리랭커는 쿼리와 문서 간의 관련성을 더 정밀하게 계산합니다.

단계 1: 리랭크 추론 엔드포인트 생성

PUT _inference/rerank/jina-rerank-test { "service": "jina", "service_settings": { "api_key": "<여기에_JINA_API_KEY_입력>", "model_id": "jina-reranker-v1-base-en" } }
Plain Text
복사

단계 2: 리랭킹을 포함한 검색 실행

retriever 쿼리를 사용하여 1차 검색을 수행한 뒤, 그 결과를 Jina Reranker로 재정렬하는 방식입니다.
POST jina-embedding-index/_search { "retriever": { "text_similarity_reranker": { "retriever": { "standard": { "query": { "match": { "content": "검색 최적화 방법" } } } }, "field": "content", "inference_id": "jina-rerank-test", "inference_text": "검색 최적화 방법", "window_size": 10 } } }
Plain Text
복사
window_size: 리랭킹을 수행할 상위 문서의 개수입니다.

5. 결론

Elasticsearch와 Jina AI 모델의 통합은 검색 품질을 획기적으로 향상시키고, 사용자에게 더 빠르고 정확한 결과를 제공합니다.
개발자들은 복잡한 MLOps 구축 없이도 Elasticsearch 내에서 실시간 임베딩 및 리랭킹 기능을 활용하여 스마트한 검색 앱을 쉽게 만들 수 있습니다.
특히 Jina AI의 다국어 리랭킹 기능은 다양한 언어 데이터를 효율적으로 처리하여 글로벌 사용자에게 최적화된 검색 경험을 제공합니다.
이러한 혁신적인 접근 방식은 단순히 검색 효율성을 넘어, 사용자 요구에 맞춘 개인화된 결과 제공에 기여합니다.
결과적으로, Elasticsearch와 Jina AI의 결합은 AI 기반의 지능형 검색 솔루션을 구현하는 강력한 플랫폼을 제공합니다.
이는 사용자 경험을 향상시키고 검색 결과의 정확성 및 속도를 개선하여 정보 접근성을 높이며, 검색 기술 발전에 중요한 역할을 할 것입니다.
출처
정지완 프로
(안녕하세요 반갑습니다 / Elasticsearch&Opensearch 기술지원 업무를 담당하고 있어요 )