DATABASE · OPENSEARCH
OpenSearch(ElasticSearch 포크) 학습 기록. 매핑·샤딩·쿼리·RAG 검색 적용 주제.
[초안] OpenSearch 검색 품질을 좌우하는 analyzer 구조: nori, ngram, tokenizer, token filter 제대로 이해하기
검색 기능은 백엔드 엔지니어가 피할 수 없는 과제 중 하나다. 상품 검색, 로그 검색, 자동완성, 오타 보정, 다국어 처리 같은 요구사항이 쌓이다 보면 결국 Elasticsearch 혹은 OpenSearch 같은 검색 엔진을 도입하게 되고, 그 순간부터 "왜 이 키워드로는 안 나오지?", "왜 부분 일치가 이상하게 동작하지?", "왜 한글은 조사까지 걸리지...
[초안] OpenSearch 기초: 검색 엔진을 백엔드 관점에서 다루기
관계형 DB만으로 운영하다가 검색 기능이 본격적으로 필요해지는 순간이 꼭 온다. 상품명 부분 일치, 오타 허용, 형태소 분석, 한/영 혼용, 가중치 기반 정렬, 집계(aggregation), 파사드 필터. 이런 요구가 쌓이면 LIKE '%...%' + 인덱스는 금세 깨진다. FULLTEXT 인덱스를 동원해도 한국어 형태소와 다국어 처리, 실시간 색인 토폴로...
DFS Query Then Fetch
검색 정확도(Relevance)를 높이기 위해 사용하는 검색 수행 모드(Search Type) 중 하나이다. 성능을 조금 희생(Round-trip 추가)하는 대신, 분산된 샤드들의 통계를 합산하여 정확한 전역 스코어를 계산하는 방식이다. OpenSearch의 기본 랭킹 알고리즘인 BM25는 TF-IDF 개념을 기반으로 동작한다 여기서 중요한 변수가 IDF(...
Mapping
- OpenSearch의 데이터 타입은 인덱스의 Mapping을 통해 결정 됨 - 데이터가 어떻게 저장되고 검색될지 결정하는 핵심 요소 - String Types: - text : 전문 검색(Full-text search)용. Analyzed - keyword : 정확한 값(Exact value)용. Not Analyzed - Numeric Types: -...
OpenSearch로 RAG 검색 품질 높이기 — Hybrid Search, Reranking, Sentence Window
RAG 파이프라인에서 OpenSearch를 검색 엔진으로 쓸 때, 순수 벡터 검색만으로는 한계가 있다. 실제로 구현된 코드를 분석하면서 검색 품질을 높이는 세 가지 기법을 정리해봤다. --- 벡터 검색(kNN)은 의미적으로 유사한 문서를 찾는 데 강하다. 그런데 사용자가 고유명사, 코드명, 오타가 섞인 키워드로 검색하면 벡터 유사도가 낮게 나오는 경우가 있...
OpenSearch에서의 Sharding
간단하게 얘기하면 "HashMap의 동작 원리"를 떠올리면 이해가 가장 빠르다 <br> OpenSearch의 샤딩은 단순히 데이터를 쪼개는 것이 아니라, 결정론적 알고리즘을 통해 데이터를 분산하고 다시 찾아낸다. 데이터가 어떤 샤드에 저장될지 결정하는 메커니즘인 라우팅 과정을 중심으로 설명해보자. OpenSearch가 "이 문서를 0번 샤드에 넣을지, 1번...
Refresh Interval
OpenSearch의 근간인 Apache Lucene은 불변의 Segment 단위로 데이터를 저장한다. - 1. In-memory Buffer(메모리 버퍼): - 데이터가 들어오면 가장 먼저 메모리 버퍼에 쌓인다. - 동시에 데이터 유실 방지를 위해 Translog에도 기록된다. - 이 상태에서는 아직 검색(Search)이 불가능하다 - 2. Refresh...