fix: be more eager about constructing search index
| | |
| | | type SearchType = "basic" | "tags" |
| | | let searchType: SearchType = "basic" |
| | | let currentSearchTerm: string = "" |
| | | let index: FlexSearch.Document<Item> | undefined = undefined |
| | | const p = new DOMParser() |
| | | const encoder = (str: string) => str.toLowerCase().split(/([^a-z]|[^\x00-\x7F])/) |
| | | let index = new FlexSearch.Document<Item>({ |
| | | charset: "latin:extra", |
| | | encode: encoder, |
| | | document: { |
| | | id: "id", |
| | | index: [ |
| | | { |
| | | field: "title", |
| | | tokenize: "forward", |
| | | }, |
| | | { |
| | | field: "content", |
| | | tokenize: "forward", |
| | | }, |
| | | { |
| | | field: "tags", |
| | | tokenize: "forward", |
| | | }, |
| | | ], |
| | | }, |
| | | }) |
| | | |
| | | const p = new DOMParser() |
| | | const fetchContentCache: Map<FullSlug, Element[]> = new Map() |
| | | const contextWindowWords = 30 |
| | | const numSearchResults = 8 |
| | |
| | | searchBar?.addEventListener("input", onType) |
| | | window.addCleanup(() => searchBar?.removeEventListener("input", onType)) |
| | | |
| | | index ??= await fillDocument(data) |
| | | await fillDocument(data) |
| | | registerEscapeHandler(container, hideSearch) |
| | | }) |
| | | |
| | |
| | | * @param data data to fill index with |
| | | */ |
| | | async function fillDocument(data: { [key: FullSlug]: ContentDetails }) { |
| | | const index = new FlexSearch.Document<Item>({ |
| | | charset: "latin:extra", |
| | | encode: encoder, |
| | | document: { |
| | | id: "id", |
| | | index: [ |
| | | { |
| | | field: "title", |
| | | tokenize: "forward", |
| | | }, |
| | | { |
| | | field: "content", |
| | | tokenize: "forward", |
| | | }, |
| | | { |
| | | field: "tags", |
| | | tokenize: "forward", |
| | | }, |
| | | ], |
| | | }, |
| | | }) |
| | | let id = 0 |
| | | for (const [slug, fileData] of Object.entries<ContentDetails>(data)) { |
| | | await index.addAsync(id++, { |
| | |
| | | tags: fileData.tags, |
| | | }) |
| | | } |
| | | |
| | | return index |
| | | } |