Claude Native (Grep/Glob) vs index1 vs qmd — 다양한 규모에서의 세 가지 검색 도구 완전 성능 비교
| 데이터 출처 | 출처 상세 | 신뢰도 |
|---|---|---|
| index1 실측 | 본 프로젝트 17,725 chunks / 1,707 문서 / 185MB 데이터라이브러리,여러 번 실행 후 중앙값 | 높음 (실측) |
| ripgrep 벤치마크 | 공식 burntsushi/ripgrep 저장소 README 벤치마크 (Linux kernel, ~1GB 코퍼스) | 높음 (공식) |
| SQLite FTS5 | sqlite.org 공식문서 + andrewmara.com 18M 행 trigram 벤치마크 | 높음 (공식+제3자) |
| sqlite-vec | alexgarcia.xyz 공식 v0.1.0 릴리스벤치마크 (SIFT1M/GIST500K) | 높음 (작성자 발표) |
| Ollama embed | collabnix.com 임베딩 모델 가이드 + nomic.ai 공식블로그 | 중상 |
| qmd 관리방법 | tobi/qmd 소스 코드 분석 + 컴포넌트벤치마크추정 (없음공식릴리스벤치마크) | 중 (추정) |
| 규모 추정 | 알고리즘 복잡도 기반 O(N)/O(log N)/O(N*D) 에서실측벤치마크선형/로그 외삽 | 중 (추정) |
어떤 AI Agent를 사용하든(Claude Code、Cursor、Cline...),검색할 때마다 반환 결과를 읽어야 합니다。
반환이 많을수록 AI가 느리게 읽고 비용이 높습니다。
| 지표 | index1 | qmd |
|---|---|---|
| 단일 검색 반환량 | ~460 tok | ~900 tok |
| AI 읽기 소요 시간 | < 0.1 초 | ~0.2 초 |
| 검색지연시간(엔드까지엔드) | ~100 ms | ~1,200 ms |
| 20 회 검색 누적 | 9,200 tok | 18,000 tok |
| 200K 윈도우 점유율 | 4.6% | 9% |
| AI 비용 (20 회 / $3/M) | $0.03 | $0.05 |
MEASURED 비용 기준 Claude Sonnet $3/M input tokens 추산
| 차원 | Claude Native | index1 | qmd |
|---|---|---|---|
| AI 검색당 호출 횟수 | 1 회 (Grep) | 1 회 (docs_search) | 1-3 회 (판단 필요 search/vsearch/query) |
| AI가 이해해야 하는 API | 3 개 (직관적) | 1 개통합하나入口 | 6 개 tools |
| 인덱스 초기화 | 불필요 | 1 단계: index1 index | 2 단계: bun run index + bun run vector |
| 환境 자동 진단 | N/A | ✓ index1 doctor --fix | ✗ |
| 💰 단일회반환 Token | ~36,000 tok (고빈도 단어) | ~460 tok (Top-5) | ~900 tok (Top-10) |
| 검색지연시간 (体감각) | < 50 ms | ~100 ms | ~1,200 ms (query 전체관리방법) |
| Ollama 사용 불가 시 | N/A | 순수 텍스트 검색으로 자동 다운그레이드 | 벡터검색완료전체아니가능사용 |
Grep("search")docs_search("검색怎么工作의")search("search") → 결과하나일반query("search") → 대기 1.2s각 도구는 MCP 프로토콜을 통해 AI Agent에 연결。Claude Native 위해내장도구,불필요추가외부구성배치。
| AI Agent | MCP 지원 | Claude Native | index1 | qmd | 비고 |
|---|---|---|---|---|---|
| Claude Code | ✓ 원본생성 | 내장 | ✓ 1 개入口 | ✓ 6 개 tools | index1 하나개 docs_search 완료 |
| OpenClaw | ✓ MCP | 내장 | ✓ | ✓ | 오픈소스 Claude Code 대체, 네이티브 MCP |
| Cursor | ✓ MCP | 내장 (다른 구현) | ✓ | ✓ 판단 필요 tool | Cursor 의 AI는 최소 tools 선호 |
| Windsurf | ✓ MCP | 내장 | ✓ | ✓ | MCP stdio 모델式 |
| Cline | ✓ MCP | 내장 (VS Code) | ✓ | ✓ | VS Code 확장, 지원 MCP |
| Aider | ✗ | 내장 grep | 필요수동동적통합 | 필요수동동적통합 | 네이티브 미지원 MCP 지원 |
| GitHub Copilot | 부분 | 내장 | 필요 Agent Mode | 필요 Agent Mode | Copilot Agent Mode 지원 MCP |
index1 의 1 개통합하나入口설정계산하게 하다모든있음 AI Agent 都능력하나회호출명령중,불필요이해해결여러개 tools 의지역别。 qmd 의 6 개 tools (search/vsearch/query/get/multi_get/status) 증가추가했습니다 AI 의결정策부정担。
| 능력力차원 | Claude Native | index1 + bge-m3 | qmd |
|---|---|---|---|
| 중국어 토크나이징 | N/A (문자 그대로 매칭) | ✓ jieba 정확한 토크나이징 pip install index1[chinese] |
✗ porter unicode61 기준 Unicode 문자기호切분,없음언어의미 |
| Embedding 모델 | N/A | bge-m3 1024d BAAI 여러언어언어모델,CJK최적화 |
embeddinggemma 300M 영어문서위주,CJK 언어의미丢손실엄격중요 |
| CJK 쿼리 전략 | N/A | 동적 가중치 CJK 감지 시 → BM25=0.2 / Vec=0.8 |
고정 가중치 언어 구분 없음, 적응 없음 |
| 크로스 언어 검색 | ✗ 만문자 그대로 매칭 | ✓ 중문서쿼리영어문서코드 "구성배치합그리고" → config.py merge() |
제한적 모델언어의미능력力약한 |
| 일본어 / 한국어 | ✗ | ✓ bge-m3 원본생성지원유지 벡터검색가능사용,BM25 필요추가외부분단어기 |
✗ |
| 구성배치방법방안 | 모델대소 | 벡터차원 | 내저장점유사용 | 인덱스속도정도 (10K) | 저장 (10K) |
|---|---|---|---|---|---|
| index1 (순수 BM25) | 0 | N/A | ~80 MB | ~10 s | ~60 MB |
| index1 + Ollama nomic-embed-text 768d |
274 MB | 768d | ~600 MB | ~10 min | ~150 MB |
| index1 + Ollama + bge-m3 bge-m3 1024d · CJK최적화 |
~1.2 GB | 1024d | ~900 MB | ~14 min | ~200 MB |
| qmd embeddinggemma 300M + 2 GGUF |
~2.2 GB (3 모델) | 768d | ~2.5 GB | ~8 min | ~80 MB |
| 쿼리표시例 | index1 BM25 결과 | qmd BM25 결과 |
|---|---|---|
"검색功능력" |
search.py, cli.py (정확) | 없음결과或따라기계매칭 |
"구성배치합그리고" |
config.py merge() (정확) | 없음결과 |
"search function" |
search.py (정규일반적) | search.py (정규일반적) |
MEASURED 기반~에 index1 소스 코드항목목표실제실제검색측정시도
·
CODE qmd FTS5 구성배치출처소스: store.ts:519
pip install index1[chinese]index1 config embedding_model bge-m3index1 index --force
store.ts 중의모델 URIMEASURED bge-m3 모델대소 ~1.2GB (BAAI/bge-m3) · MEASURED 1024d 벡터 vs 768d: 저장 +33%, 인덱스 +40%, 검색지연시간 +15%
| 도구 | 인덱스策전략 | 10K 문서 | 50K 문서 | 100K 문서 | 데이터 출처 |
|---|---|---|---|---|---|
| Claude Native | 인덱싱 불필요 | 0 s | 0 s | 0 s | MEASURED |
| index1 | FTS5 역인덱스 | ~10 s | ~30 s | ~60 s | PROJECTED |
| index1 + Ollama | FTS5 + Ollama embedding | ~10 min | ~45 min | ~90 min | PROJECTED @9K tok/s |
| qmd | FTS5 + GGUF embedding | ~8 min | ~35 min | ~70 min | PROJECTED |
| 도구 | 저장내容 | 10K | 50K | 100K |
|---|---|---|---|---|
| Claude Native | 없음 (스캔描소스 코드) | 0 MB | 0 MB | 0 MB |
| index1 | FTS5 인덱스 + 원본문서 | ~60 MB | ~250 MB | ~500 MB |
| index1 + Ollama | FTS5 + 768d 벡터 | ~150 MB | ~600 MB | ~1.2 GB |
| qmd | FTS5 + 벡터 + llm_cache | ~80 MB | ~350 MB | ~700 MB |
| 도구 | 내저장그룹성공 | 10K | 50K | 100K |
|---|---|---|---|---|
| Claude Native | ripgrep 진행프로그램 + 문서건완화충돌 | ~50 MB | ~150 MB | ~400 MB |
| index1 | Python + SQLite 페이지캐시 | ~80 MB | ~150 MB | ~250 MB |
| index1 + Ollama | Python + SQLite + Ollama 모델 | ~600 MB | ~700 MB | ~800 MB |
| qmd | Bun + SQLite + 3 GGUF 모델 | ~2.5 GB | ~2.7 GB | ~3.0 GB |
REFERENCE ripgrep 9.5M 문서건 = ~400MB RSS (burntsushi/ripgrep#1823) · REFERENCE Ollama nomic-embed-text ~500MB resident
| 도구 / 모델式 | 계산계산공식 | 10K 문서 | 50K 문서 | 100K 문서 |
|---|---|---|---|---|
| Claude Native (Grep) | ripgrep_scan |
30-50 ms | 150-250 ms | 300-500 ms |
| index1 + Ollama | BM25 + embed + vec + RRF |
~60 ms | ~90 ms | ~120 ms |
| index1 | BM25 + RRF |
< 5 ms | ~8 ms | ~15 ms |
| index1 캐시명령중 | L1 cache lookup |
< 1 ms | < 1 ms | < 1 ms |
| qmd search (BM25) | FTS5 only |
< 5 ms | ~8 ms | ~15 ms |
| qmd vsearch (Vector) | embed + vec |
~30 ms | ~65 ms | ~90 ms |
| qmd query (전체관리방법) | expand + BM25 + vec + RRF + rerank |
~1,200 ms | ~1,250 ms | ~1,300 ms |
| qmd 캐시명령중 | llm_cache lookup |
~5 ms | ~5 ms | ~5 ms |
| 쿼리 | 引엔진소요 시간 (Cold) | 引엔진소요 시간 (Hot) | CLI 총소요 시간 | Grep 대비교 |
|---|---|---|---|---|
"CJK" (低빈도단어, 46행) | 576 ms | 94 ms | 0.21s | 0.43s (Grep 더慢) |
"embedding" (중빈도, 257행) | 119 ms | 85 ms | 0.20s | 0.24s (연결近) |
"search" (높은빈도, 950행) | 100 ms | - | 0.22s | 0.21s (평균수동) |
"config" (초과높은빈도, 4386행) | 119 ms | - | 0.24s | 0.18s (Grep 빠른) |
"검색이다怎么工作의" (CJK 언어의미) | 91 ms | - | 0.20s | Grep 없음방법의미 검색 |
"벡터검색의실제현재원본이해" (CJK 언어의미) | 89 ms | - | 0.21s | Grep 없음방법의미 검색 |
"how does search work" (EN 언어의미) | 332 ms | - | 0.44s | Grep 없음방법의미 검색 |
"how to configure watch paths" | 228 ms | - | 0.34s | 필요 2-3 회 Grep 그룹합 |
"search" 쿼리의 Token 소비| 규모 | Grep 매칭행수 | Claude Native (Grep) | index1 (Top-5) | qmd (Top-10) | index1 절약 |
|---|---|---|---|---|---|
| 현재이전 (64 문서건) | 950 행 M | ~36,000 tokens M | ~460 tokens M | ~900 tokens | 98.7% |
| 10K 문서 | ~15,000 행 P | ~375,000 tokens | ~460 tokens | ~900 tokens | 99.88% |
| 50K 문서 | ~60,000 행 P | ~1,500,000 tokens | ~460 tokens | ~900 tokens | 99.97% |
| 100K 문서 | ~120,000 행 P | ~3,000,000 tokens | ~460 tokens | ~900 tokens | 99.98% |
M = 실측, P = 기반~에단어빈도密정도선형추정。Claude 컨텍스트 윈도우 200K tokens,100K 문서쿼리 "search" 의 Grep 결과필요필요 15 개완료전체윈도우口비로소능력설치이하。
| 쿼리 단어 | 빈도 유형 | Grep 매칭행 | Grep Tokens | index1 | qmd | index1 절약 |
|---|---|---|---|---|---|---|
CJK |
희귀 단어 | ~1,000 | ~25,000 | ~460 | ~900 | 98.2% |
embedding |
중빈도단어 | ~30,000 | ~750,000 | ~460 | ~900 | 99.94% |
search |
고빈도 단어 | ~120,000 | ~3,000,000 | ~460 | ~900 | 99.98% |
config |
초과높은빈도 | ~500,000 | ~12,500,000 | ~460 | ~900 | 99.99% |
import |
극도로높은빈도 | ~800,000 | ~20,000,000 | ~460 | ~900 | 99.99% |
Grep 소비량级초과대(10K 항목목표 250K tok / 100K 항목목표 2.4M tok),없음가능비교성,이처리만대비교 index1 및 qmd。
| 功능력 | Claude Native | index1 | qmd |
|---|---|---|---|
| 运행시 | Rust (ripgrep) | Python 3.10+ | Bun (TypeScript) |
| 검색알고리즘 | 문자 그대로 매칭 + 정규경우 | BM25 + Vector + RRF | BM25 + Vector + QE + RRF + Rerank |
| BM25 전체문서검색 | ripgrep (아닌 BM25) | ✓ FTS5 | ✓ FTS5 |
| 벡터의미 검색 | ✗ | ✓ sqlite-vec | ✓ sqlite-vec |
| Embedding 엔진 | N/A | Ollama (본지역) | node-llama-cpp (본지역 GGUF) |
| 기본 Embedding 모델 | N/A | nomic-embed-text 768d (기본) bge-m3 1024d (CJK최적화) | embeddinggemma-300M (만영어문서) |
| 모델생성상태및가능확장展성 | |||
| 가능선택모델수량 | N/A | Ollama 생성상태 수백 개 | 만 GGUF 형식 |
| 교체모델방법式 | N/A | 하나줄명령令: index1 config embedding_model xxx | 변경소스 코드传 GGUF URI |
| 모델사전설정레벨位 | N/A | 5 레벨 (lightweight / standard / chinese / multilingual / high_precision) | 없음사전설정,写死 3 개모델 |
| 중문서모델전환 | N/A | ollama pull bge-m3 하나키전환 | 필요자동행寻찾기 GGUF 중문서모델 |
| 모델핫전환 | N/A | ✓ 변경구성배치 + index --force | ✗ 필요중요새편집번역/중요시작 |
| Query Expansion | ✗ | ✗ | ✓ Fine-tuned 1.7B GGUF |
| LLM Reranking | ✗ | ✗ | ✓ qwen3-reranker 0.6B GGUF |
| RRF 융합합 | ✗ | ✓ k=60 | ✓ k=60 + position-aware |
| 쿼리캐시 | ✗ | ✓ L1/L2 (10min TTL) | ✓ llm_cache (SQLite) |
| MCP Tools | 3 (Grep/Glob/Read) | 5 | 6 |
| 분블록策전략 | 없음 (전체문서) | 5 개 언어 인식 (md/py/rs/js/txt) | Markdown 분블록 (800 tok/chunk) |
| 지원유지문서건클래스유형 | 모든 텍스트 | .md .py .rs .js .ts .jsx .tsx .txt | .md (Markdown) |
| CJK최적화 | ✗ | ✓ 동적 가중치 BM25=0.2/Vec=0.8 | ✗ |
| Web UI | ✗ | ✓ Flask (port 6888) | ✗ |
| 문서건监听 | ✓ 실시간 | ✓ watcher | ✗ |
| 자동동적진단판단 (doctor) | N/A | ✓ | ✗ |
| 외부부분서비스서비스의존성 | 없음 | Ollama (가능선택) | 없음 |
| 크로스플랫폼 | macOS/Linux/Windows | macOS/Linux/Windows | macOS/Linux (Bun) |
| AI 편집편집기 / Agent | Claude Native | index1 | qmd |
|---|---|---|---|
| Claude Code | ✓ 내장 | ✓ MCP stdio | ✓ MCP stdio |
| Cursor | ✓ 내장 | ✓ MCP stdio | ✓ MCP stdio |
| Windsurf | ✓ 내장 | ✓ MCP stdio | ✓ MCP stdio |
| Cline (VS Code) | ✓ 내장 | ✓ MCP stdio | ✓ MCP stdio |
| OpenClaw | ✓ 내장 | ✓ MCP stdio | ✓ MCP stdio |
| CLI / 스크립트본 | ✗ 없음독립설립 CLI | ✓ index1 search |
✓ bun run search |
| 평균台 | index1 | qmd |
|---|---|---|
| macOS (ARM / Intel) | ✓ pip / pipx | ✓ bun |
| Linux (x64 / ARM) | ✓ pip / pipx | ✓ bun |
| Windows | ✓ pip / pipx | ⚠ Bun Windows 지원유지제한적 |
| Docker | ✓ | ✓ |
| 차원 | Claude Native | index1 | qmd |
|---|---|---|---|
| 검색속도정도 (소규모) | ★★★★★ | ★★★★☆ | ★★☆☆☆ |
| 검색속도정도 (대규모) | ★★☆☆☆ | ★★★★☆ | ★★★☆☆ |
| 검색정밀정도 (Precision) | ★★★☆☆ | ★★★★☆ | ★★★★★ |
| Token 효과비율 | ★★☆☆☆ | ★★★★★ | ★★★★☆ |
| 언어의미이해해결 | ★☆☆☆☆ | ★★★★☆ | ★★★★★ |
| CJK / 여러언어언어 | ★☆☆☆☆ | ★★★★☆ | ★★☆☆☆ |
| 쉬운사용성 / 제로구성배치 | ★★★★★ | ★★★★☆ | ★★★☆☆ |
| 资소스소비 | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
| 코드문서건지원유지 | ★★★★★ | ★★★★☆ | ★★☆☆☆ |
| 대규모가능확장展성 | ★★☆☆☆ | ★★★★☆ | ★★★★☆ |
| 크로스플랫폼호환성 macOS / Linux / Windows | ★★★★★ macOS / Linux / Windows | ★★★★★ macOS / Linux / Windows | ★★★☆☆ macOS / Linux (Win 제한적) |
| 🤖 AI Agent 쉬운사용성 | ★★★★☆ | ★★★★★ | ★★☆☆☆ |
| 🏆 총분 | 40 / 60 | 50 / 60 | 37 / 60 |
없다있음하나개도구에서모든있음차원에서 우수。추정권장의策전략이다기반据항목목표규모및쿼리클래스유형선택선택:
< 1K 문서건: Claude Native 足충분,불필요추가외부도구。
1K-10K 문서건: Claude Native (정밀확인쿼리찾기) + index1 (언어의미/CJK 쿼리)。
10K-100K 문서건: index1 위주 (Token 절약 99%+),Grep 만사용~에이미알다표시식별기호。
대유형영어문서문서라이브러리: qmd (최높은정밀정도) + Grep (빠른속도고정位)。
여러언어언어코드항목목표: index1 (유일하나지원유지 CJK최적화 + 5 종류언어언어분블록)。