
SeekStorm는 Rust로 만든 오픈소스 검색 엔진이다. 라이브러리로 애플리케이션에 포함하거나, 멀티테넌트 서버로 운영하거나, MCP 서버를 통해 AI 에이전트에 검색 기능을 제공할 수 있다. 제작자 측은 어휘 검색·벡터 검색·하이브리드 검색을 지원하며, 어휘 검색은 500만 건의 영어 위키백과 문서에서 평균 지연 시간 0.3ms를 기록했다고 밝혔다. 프로젝트는 Apache License 2.0으로 공개됐으며 2020년부터 프로덕션에서 사용 중이라고 소개한다.
SeekStorm는 역색인 기반 어휘 검색 엔진과 IVF 기반 근사 최근접 이웃 벡터 검색 엔진을 함께 두고, 쿼리마다 어휘·벡터·하이브리드 검색을 선택한다. 하이브리드 검색은 Reciprocal Rank Fusion(RRF)으로 결과를 결합한다. 제작자 측은 벡터 검색 중에도 필터를 적용하고, 하이브리드 검색이 후보 결과를 단순 재순위화하는 방식이 아니라 두 엔진의 검색 결과를 결합한다고 설명한다.
‘1밀리초 미만’이라는 표현은 평균 지연 시간을 뜻한다. 500만 위키백과 문서에서 어휘 검색 평균은 0.3ms이고, P99는 쿼리 유형에 따라 0.8~6.8ms다. 벡터 검색은 SIFT1M 규모에서 recall@10 95% 기준 188µs를 기록했지만, 더 큰 데이터에서는 1,600만 위키백과 벡터에 2.7ms, 960차원 GIST1M에 3.2ms가 걸렸다고 한다.
기능과 적용 방법
어휘 검색에는 BM25F와 BM25F_Proximity 순위화, AND·OR·구문·NOT 쿼리, 중국어 단어 분절을 포함한 6종 토크나이저, 38개 언어 형태소 분석, N-gram 구문 색인, Block-max WAND와 Maxscore가 포함된다. 벡터 검색은 여러 필드와 청크의 벡터 색인, 내장 Model2Vec 추론 또는 외부 임베딩, F32·I8 정밀도, 코사인·내적·유클리드 거리, TurboQuant와 스칼라 양자화를 지원한다.
문서는 커밋 전과 커밋 중에도 검색 가능하다는 것이 제작자 측의 설명이다. 세그먼트 병합이 없고 JIT 워밍업이나 가비지 컬렉션 일시 정지도 없다고 밝힌다. 그 밖에 패싯, 정렬, 결과 부스팅, 지리적 근접 검색, 오타 허용, 자동 완성, 즉시 검색, 키워드 주변 문맥(KWIC) 하이라이트, 동의어를 제공한다. CSV·JSON·NDJSON·PDF 입력, REST API, 내장 웹 UI, API 키 관리, 멀티테넌시도 지원한다.
인덱스는 RAM 또는 메모리 매핑 파일로 사용할 수 있고, 같은 바이너리 인덱스를 라이브러리·서버·클라우드 사이에서 쓸 수 있다고 설명한다. 인덱스 크기와 필드 수에 제한이 없다는 주장도 프로젝트 문서에 담겼다. Windows·Linux·macOS를 지원하며, x86-64의 AVX2와 AArch64의 NEON SIMD 가속을 제공한다. 단일 노트북에서 초당 3만5,000건 색인 처리량을 낸다는 수치는 제작자 측이 제시했다.
라이브러리는 seekstorm 크레이트로, 서버는 Docker 이미지 wolfgarbe/seekstorm_server로 제공된다. Docker 서버를 실행하는 명령은 다음과 같다.
docker run -ti -p "8000:80" -v "$(pwd)/seekstorm_storage:/seekstorm_index:z" wolfgarbe/seekstorm_server
실행 후 http://127.0.0.1:8000에서 내장 웹 UI를 열 수 있다. API 키를 안전하게 사용하려면 MASTER_KEY_SECRET 환경 변수에 비밀값을 설정해야 한다. 설정하지 않으면 생성된 API 키가 노출될 수 있다고 프로젝트는 경고한다.
AI 에이전트용 MCP 서버는 다음 명령으로 설치한다.
cargo install seekstorm_mcp_server
MCP 클라이언트 설정에 실행 파일과 인덱스 경로를 등록하면 된다.
{
"mcpServers": {
"seekstorm": {
"command": "seekstorm_mcp_server",
"env": { "SEEKSTORM_INDEX_PATH": "/path/to/seekstorm-index" }
}
}
}
MCP 서버는 자식 프로세스로 표준 입출력을 사용하며 SeekStorm를 직접 포함하므로 별도 서버 프로세스나 네트워크 연결이 필요하지 않다. 지정 경로에 인덱스가 없으면 title, body, path 필드가 있는 기본 스키마로 인덱스를 만든다. MCP 도구로 어휘·벡터·하이브리드 검색, 문서 색인, JSON·NDJSON 입력, PDF 색인, 인덱스 관리를 제공한다. 세부 도구와 설정은 MCP 서버 README에 있다.
벤치마크와 조건
프로젝트가 제시한 어휘 검색 벤치마크는 영어 위키백과 문서 500만 건, 단일 필드, 결과 유형 top-k와 count 조건에서 Lucene 10.3.0-bp, Tantivy 0.25, SeekStorm 1.0.0을 비교했다. 평균 지연 시간은 각각 2,656µs, 2,205µs, 306µs였고, P99는 34,920µs, 27,084µs, 1,591µs였다. SeekStorm는 두 비교 대상 중 더 빠른 엔진보다 평균 7.2배, P99 17배 낮은 지연 시간을 보였다고 제시한다. 이 수치는 SeekStorm 저장소의 벤치마크 설명과 단일 필드 결과, 다중 필드 결과에서 확인할 수 있다. 벤치마크 저장소는 search-benchmark-game이다.
벡터 검색 수치도 데이터셋과 재현율 조건에 따라 다르다. 100만 개, 128차원 SIFT1M에서 8비트 스칼라 양자화와 nprobe=16은 recall@10 95%, 평균 188µs였고, nprobe=33은 recall@10 99%, 평균 302µs였다. 100만 개, 960차원 GIST1M에서는 nprobe=38일 때 recall@10 95%, 3,198µs였으며 nprobe=80일 때 recall@10 98%, 5,737µs였다. 위키백과 500만 문서와 1,600만 벡터를 사용한 비교에서는 2개 필드 벡터 검색이 recall@10 95%에서 2,700µs, 99%에서 6,370µs였고, 어휘 검색은 2개 필드에서 평균 305µs였다.
프로젝트 문서는 어휘 검색이 정확한 용어·이름·숫자·구문 검색에 적합하고, 벡터 검색은 의미적 유사성을 찾는 데 유용하지만 새롭거나 드문 용어 처리에 한계가 있을 수 있다고 주장한다. 따라서 어느 한쪽이 다른 쪽을 대체하기보다 용도에 맞게 선택하거나 하이브리드 검색으로 결합하는 방식을 제안한다. 이 비교는 프로젝트 측 설명이며, 모든 데이터와 작업에 적용되는 독립 검증 결과로 제시된 것은 아니다.
데모와 프로젝트 상태
온라인 데모 DeepHN은 Hacker News 게시물 3,000만 건과 연결된 웹 페이지를 검색한다. 다만 데모는 SeekStorm의 C# 코드 기반이며, Rust 포팅에 필요한 기능을 현재 옮기는 중이라고 프로젝트는 밝혔다. 로드맵에는 분산 검색 클러스터의 개념 검증이 있고, S3나 분산 키-값 저장소를 인덱스 백엔드로 쓰는 기능, 클라우드 샤드 자동 확장, 일본어·한국어 토크나이저, WebAssembly, GPU 및 추가 SIMD 지원 등은 계획 항목으로 기재돼 있다.
위키백과 검색 엔진을 직접 구성하는 튜토리얼은 저장소의 데모 안내에 있다. PDF 입력에는 PDFium 라이브러리가 필요하다고 문서는 안내한다. 설치·API·구성 요소의 상세 내용은 SeekStorm 저장소, API 문서, Rust 라이브러리 문서에서 확인할 수 있다.
부록: 원문 예시
./seekstorm_server local_ip="0.0.0.0" local_port=80
./seekstorm_server local_ip="0.0.0.0" local_port=80
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요