From fcfe6a53b49dc2fdff6abac876b41b52f1b0fed7 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sat, 6 Sep 2025 05:54:52 +0000 Subject: fix: Reduce polling interval on meilisearch tasks --- packages/plugins-search-meilisearch/src/index.ts | 55 +++++------------------- packages/shared/search.ts | 3 +- 2 files changed, 12 insertions(+), 46 deletions(-) (limited to 'packages') 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 { - 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 { - 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 { 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 { @@ -82,12 +46,15 @@ class MeiliSearchIndexClient implements SearchIndexClient { async clearIndex(): Promise { 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 { + 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; - updateDocuments(documents: BookmarkSearchDocument[]): Promise; - deleteDocument(id: string): Promise; deleteDocuments(ids: string[]): Promise; search(options: SearchOptions): Promise; clearIndex(): Promise; -- cgit v1.2.3-70-g09d2