진짜 텍스트 검색이 기본으로 들어 있어
row가 몇천 개를 넘어가면 LIKE '%foo%'는 잘못 고른 도구야. 모든 row를 훑거든. SQLite에는 FTS5가 들어 있어. 토큰으로 쪼갠 내용을 인덱싱해두고, MATCH query를 빠르게 돌리고, 관련도로 순위까지 매겨주는 full-text search extension이야.
FTS5가 주는데 LIKE는 못 주는 게 셋이야.
- 수백만 row에서도 1초 안에 끝나는 검색.
- 토큰 쪼개기. 단어 경계를 알아보고, 원하면 unicode나 porter stemmer를 붙이고, 부분 문자열 검색에는 trigram tokenizer를 쓸 수 있어.
rank를 통한 BM25 관련도 순위.
Self-reference: 피파의 세션 검색이 JSONL ground truth 위에서 FTS5로 돌아. WebUI에서 '예전 message 찾기'를 누르면 messages 테이블을 그대로 비추는 FTS5 virtual 테이블에 MATCH query가 나가.