Search Index
검색 인덱스 생성 모듈. 위키의 모든 문서를 pagename, title, titleKo, aliases로 인덱싱하여 자동완성 검색의 데이터 소스를 구축한다.
한국어 제목에 대해서는 초성 인덱스를 추가로 생성한다. 한국어 사용자는 "스벨트킷"을 찾을 때 "ㅅㅂㅌㅋ"처럼 자음만 입력하는 경우가 많으므로, 초성만으로도 검색이 가능해야 한다. 초성 인덱스의 3번째 요소에 원본 텍스트를 저장하여 검색 결과에서 원문을 표시할 수 있다.
초성 검색 지원
getChosung은 한글 문자열에서 초성만 추출하고, 영문·숫자는 그대로 유지한다.
isKorean은 문자열에 한국어가 포함되어 있는지 판별하여 초성 인덱스 추가 여부를 결정한다.
| input | expected |
|---|---|
한글 | ㅎㄱ |
ABC | ABC |
| input | expected |
|---|---|
한글 | 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":"스벨트킷"}
| expr | expected |
|---|---|
.count >= 4 | true |
.hasChosung | true |
.chosungOriginal | 스벨트킷 |