fix: be more eager about constructing search index
This commit is contained in:
		| @@ -15,10 +15,30 @@ interface Item { | ||||
| 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 | ||||
| @@ -444,7 +464,7 @@ document.addEventListener("nav", async (e: CustomEventMap["nav"]) => { | ||||
|   searchBar?.addEventListener("input", onType) | ||||
|   window.addCleanup(() => searchBar?.removeEventListener("input", onType)) | ||||
|  | ||||
|   index ??= await fillDocument(data) | ||||
|   await fillDocument(data) | ||||
|   registerEscapeHandler(container, hideSearch) | ||||
| }) | ||||
|  | ||||
| @@ -454,27 +474,6 @@ document.addEventListener("nav", async (e: CustomEventMap["nav"]) => { | ||||
|  * @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++, { | ||||
| @@ -485,6 +484,4 @@ async function fillDocument(data: { [key: FullSlug]: ContentDetails }) { | ||||
|       tags: fileData.tags, | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   return index | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user