Search Index

검색 인덱스 생성 모듈. 위키의 모든 문서를 pagename, title, titleKo, aliases로 인덱싱하여 자동완성 검색의 데이터 소스를 구축한다.

한국어 제목에 대해서는 초성 인덱스를 추가로 생성한다. 한국어 사용자는 "스벨트킷"을 찾을 때 "ㅅㅂㅌㅋ"처럼 자음만 입력하는 경우가 많으므로, 초성만으로도 검색이 가능해야 한다. 초성 인덱스의 3번째 요소에 원본 텍스트를 저장하여 검색 결과에서 원문을 표시할 수 있다.

초성 검색 지원

getChosung은 한글 문자열에서 초성만 추출하고, 영문·숫자는 그대로 유지한다. isKorean은 문자열에 한국어가 포함되어 있는지 판별하여 초성 인덱스 추가 여부를 결정한다.

inputexpected
한글
ㅎㄱ
ABC
ABC
inputexpected
한글
true
English
false

인덱스 생성

buildSearchIndex는 메타데이터 배열로부터 검색 인덱스를 구축한다. 하나의 문서에 대해 pagename, title, alias, 그리고 한국어 제목의 초성까지 여러 경로로 검색할 수 있도록 복수의 인덱스 엔트리를 생성한다.

SvelteKit 문서: pagename, title, alias 'SK', 초성 'ㅅㅂㅌㅋ' 총 4개 이상의 엔트리
import { buildSearchIndex } from './src/lib/search-index.ts' const idx = buildSearchIndex([{ pagename: 'SvelteKit', title: 'SvelteKit', titleKo: '스벨트킷', frontMatter: { aliases: ['SK'] }, }]) const chosung = idx.find(e => e[0] === 'ㅅㅂㅌㅋ') console.log(JSON.stringify({ count: idx.length, hasChosung: chosung !== undefined, chosungOriginal: chosung?.[2], }))
searchIdx={"count":5,"hasChosung":true,"chosungOriginal":"스벨트킷"}
exprexpected
.count >= 4
true
.hasChosung
true
.chosungOriginal
스벨트킷