diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-09-06 05:54:52 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-09-06 05:54:52 +0000 |
| commit | fcfe6a53b49dc2fdff6abac876b41b52f1b0fed7 (patch) | |
| tree | c5fc29d178e08be37dfd7e3ab9d026e514529dd2 /packages | |
| parent | 80a10231ad4c496c917aed084f9d45e6dcca191a (diff) | |
| download | karakeep-fcfe6a53b49dc2fdff6abac876b41b52f1b0fed7.tar.zst | |
fix: Reduce polling interval on meilisearch tasks
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/plugins-search-meilisearch/src/index.ts | 55 | ||||
| -rw-r--r-- | packages/shared/search.ts | 3 |
2 files changed, 12 insertions, 46 deletions
diff --git a/packages/plugins-search-meilisearch/src/index.ts b/packages/plugins-search-meilisearch/src/index.ts index 6153a9c4..f0040db7 100644 --- a/packages/plugins-search-meilisearch/src/index.ts +++ b/packages/plugins-search-meilisearch/src/index.ts @@ -18,48 +18,12 @@ class MeiliSearchIndexClient implements SearchIndexClient { const task = await this.index.addDocuments(documents, { primaryKey: "id", }); - await this.index.waitForTask(task.taskUid); - const taskResult = await this.index.getTask(task.taskUid); - if (taskResult.error) { - throw new Error( - `MeiliSearch add documents failed: ${taskResult.error.message}`, - ); - } - } - - async updateDocuments(documents: BookmarkSearchDocument[]): Promise<void> { - const task = await this.index.updateDocuments(documents, { - primaryKey: "id", - }); - await this.index.waitForTask(task.taskUid); - const taskResult = await this.index.getTask(task.taskUid); - if (taskResult.error) { - throw new Error( - `MeiliSearch update documents failed: ${taskResult.error.message}`, - ); - } - } - - async deleteDocument(id: string): Promise<void> { - const task = await this.index.deleteDocument(id); - await this.index.waitForTask(task.taskUid); - const taskResult = await this.index.getTask(task.taskUid); - if (taskResult.error) { - throw new Error( - `MeiliSearch delete document failed: ${taskResult.error.message}`, - ); - } + await this.ensureTaskSuccess(task.taskUid); } async deleteDocuments(ids: string[]): Promise<void> { const task = await this.index.deleteDocuments(ids); - await this.index.waitForTask(task.taskUid); - const taskResult = await this.index.getTask(task.taskUid); - if (taskResult.error) { - throw new Error( - `MeiliSearch delete documents failed: ${taskResult.error.message}`, - ); - } + await this.ensureTaskSuccess(task.taskUid); } async search(options: SearchOptions): Promise<SearchResponse> { @@ -82,12 +46,15 @@ class MeiliSearchIndexClient implements SearchIndexClient { async clearIndex(): Promise<void> { const task = await this.index.deleteAllDocuments(); - await this.index.waitForTask(task.taskUid); - const taskResult = await this.index.getTask(task.taskUid); - if (taskResult.error) { - throw new Error( - `MeiliSearch clear index failed: ${taskResult.error.message}`, - ); + await this.ensureTaskSuccess(task.taskUid); + } + + private async ensureTaskSuccess(taskUid: number): Promise<void> { + const task = await this.index.waitForTask(taskUid, { + intervalMs: 200, + }); + if (task.error) { + throw new Error(`Search task failed: ${task.error.message}`); } } } diff --git a/packages/shared/search.ts b/packages/shared/search.ts index 2afc9763..5158f30f 100644 --- a/packages/shared/search.ts +++ b/packages/shared/search.ts @@ -30,6 +30,7 @@ export interface SearchResult { } export interface SearchOptions { + // TODO: Make query, filter and sort strongly typed query: string; filter?: string[]; limit?: number; @@ -45,8 +46,6 @@ export interface SearchResponse { export interface SearchIndexClient { addDocuments(documents: BookmarkSearchDocument[]): Promise<void>; - updateDocuments(documents: BookmarkSearchDocument[]): Promise<void>; - deleteDocument(id: string): Promise<void>; deleteDocuments(ids: string[]): Promise<void>; search(options: SearchOptions): Promise<SearchResponse>; clearIndex(): Promise<void>; |
