Overview
2025년 마지막 달 12월 업무 중 경험 및 배우고 있는 중인 ElasticSearch에 대해서 글을 써보려한다. 지금 팀에서 VectorStore로 ElasticSearch를 VectorStore로 사용하고 있고, Embedding 처리 및 Chunking 부분을 맡게 되어서 잘 몰랐던, 사용해보지 않았던 ES를 사용하여 Embedding을 하는 업무를 진행하게 되었다.
ElasticSearch, ELK
ELK Stack(ES, LogStash, Kibena)으로 알게 되었지만 딱히 쓸 케이스가 없었는데, 운영업무(STT/TA)에서 ES를 통해 관심이 생겼엇고, VectorStore로써 사용되기 때문에 그렇구나,,, 라고 생각하던 와중에 Embedding 업무를 하게 됨으로써 책도사고 알아보게 되었다.

elasticSearch와 kibena만 설치하였다.
PgVector
PgVector는 PostgreSQL의 오픈소스 확장으로, 벡터 데이터 저장과 유사도 검색를 지원하는데, RDB에 친숙하고 조금 다르지만 SQL로 유사도 검색을 할 수 있고, DBever나 일반 RDB붙는거라서 값확인도 편하고, Postgres Mcp Server 사용도 편하고 개인적으로는 매우 선호하는 VectorStore이다. 초기 개발때 PgVector를 사용하여 기능개발한 후 ES로 분기하여 개발하였다.
version: '3.8'
services:
postgres:
image: pgvector/pgvector:pg16
container_name: 컨테이너명
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d postgres"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres_data:
아래 docker-compose.yml로 빠르게 구축하였다.
Embedding
Input Data(텍스트)를 dimension에 따라 숫자형태 Vector로 변환하는걸 말한다. Embedding, Vector화 처리인것이다. 나는 OpenAI의 text-embedding-ada-002부터 사용하게 되었고, 지금은 text-embedding-3-large를 쓰고 있는데, 이런 Embedding API가 나오기전엔 pytorch에서 임베딩을 하였다고 하지만 해본적은 없다. 나는 pdf,docx의 데이터를 extract하여 의미 단위로 Chunking하여 embedding한 후 ElasticSearch에 저장해야되는것이었다.

OpenAI Embedding Model
Chunking
Chunking은 특정 전략, 의도에 따라 쪼갠다, 나눈다라는 맥락으로 보면 된다. 주로 docx, pdf를 OCR? 텍스트 추출하엿다. 스캔하여 이미지화된 pdf는 텍스트 추출이 안되고, pdf를 열어서 긁어지는 문서는 추출이 가능하다. docx즉 워드는 python-docx를 통해 텍스트의 style, align, font size, color등을 추출할 수 있는데, 특정 포맷으로 된 문서들의 공통점이나 규칙을 찾아서 적용할때 Rule로 많이 사용하였다.
OCR(Optical Character Recognition)
이미지나 스캔된 문서에 포함된 텍스트를 컴퓨터가 인식하고 편집 가능한 텍스트 데이터로 변환하는 기술이라는데, 주로 Azure의 Document Intelligence에서 OCR 기능으로 사용하였다. 월에 500page까지 공짜라고 하던데, 1페이지 밖에 안되는거같다.

OCR도하고 요약도 해준다고는 함.
갑자기 마치며
원래 ES의 인덱스, 인덱스의 Mapping, ES rest api query, 모니터링툴(kibena,, Cerebro,, ) 등등 가볍게 사용하기 좋은 예제를 남기려고 했는데 의식에 흐름에 따라 키워드별로 적다보니, 정해진 시간이 오버되어서 일단 용어 정리에서 마무리한다.