From 9af71e3efc295a56d4672cf7fe7ac269c3dd13a4 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Fri, 28 Oct 2022 13:03:43 +0200 Subject: [PATCH] #118 - Improved caching That will teach me to read documentation (it won't). --- src/cache-manager.ts | 1 - src/database.ts | 12 ++++++------ src/main.ts | 9 +++++++-- src/search/search-engine.ts | 13 ++++++++----- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/cache-manager.ts b/src/cache-manager.ts index 378679a..51b2be3 100644 --- a/src/cache-manager.ts +++ b/src/cache-manager.ts @@ -3,7 +3,6 @@ import type { IndexedDocument } from './globals' import { database } from './database' import MiniSearch from 'minisearch' import { minisearchOptions } from './search/search-engine' -import { fileToIndexedDocument } from './file-loader' class CacheManager { private documentsCache: Map = new Map() diff --git a/src/database.ts b/src/database.ts index 590cb38..f26ee83 100644 --- a/src/database.ts +++ b/src/database.ts @@ -6,14 +6,14 @@ class OmnisearchCache extends Dexie { string > searchHistory!: Dexie.Table<{ id?: number; query: string }, number> - minisearch!: Dexie.Table<{date: string; data: string}, string> + minisearch!: Dexie.Table<{ date: string; data: string }, string> constructor() { - super(app.appId + '_omnisearch') - this.version(4).stores({ - pdf: 'path, hash, size, text', - searchHistory: '++id, query', - minisearch: 'date, data' + super('omnisearch/cache/' + app.appId) + this.version(5).stores({ + pdf: 'path, hash, size', + searchHistory: '++id', + minisearch: 'date', }) } } diff --git a/src/main.ts b/src/main.ts index 16747d2..ac824c7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -116,6 +116,9 @@ async function populateIndex(): Promise { console.log(`Omnisearch - Indexed ${files.length} notes`) console.timeEnd('Omnisearch - Timing') + // Load normal notes into the main search engine + SearchEngine.loadTmpDataIntoMain() + // Load PDFs if (settings.PDFIndexing) { console.time('Omnisearch - Timing') @@ -126,10 +129,12 @@ async function populateIndex(): Promise { console.timeEnd('Omnisearch - Timing') } + // Load PDFs into the main search engine, and write cache + SearchEngine.loadTmpDataIntoMain() await tmpEngine.writeToCache() - SearchEngine.swapEngines() - // Save minisearch + // Clear memory + SearchEngine.clearTmp() } async function cleanOldCacheFiles() { diff --git a/src/search/search-engine.ts b/src/search/search-engine.ts index 4efcd05..3924ca6 100644 --- a/src/search/search-engine.ts +++ b/src/search/search-engine.ts @@ -89,12 +89,15 @@ export class SearchEngine { } /** - * Must be called when the background indexing is done, - * to load the freshest data into the main instance + * Loads the freshest indexed data into the main instance. */ - public static swapEngines(): void { - ;[this.engine, this.tmpEngine] = [this.tmpEngine, this.engine] - this.isIndexing.set(false) + public static loadTmpDataIntoMain(): void { + const tmpData = this.tmpEngine.minisearch.toJSON() + this.engine.minisearch = MiniSearch.loadJS(tmpData, minisearchOptions); + } + + public static clearTmp():void { + this.tmpEngine.minisearch = new MiniSearch(minisearchOptions) } private minisearch: MiniSearch