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 --- apps/workers/workers/searchWorker.ts | 2 +- packages/plugins-search-meilisearch/src/index.ts | 55 +++++------------------- packages/shared/search.ts | 3 +- 3 files changed, 13 insertions(+), 47 deletions(-) diff --git a/apps/workers/workers/searchWorker.ts b/apps/workers/workers/searchWorker.ts index 7dd25ee8..1433ef3c 100644 --- a/apps/workers/workers/searchWorker.ts +++ b/apps/workers/workers/searchWorker.ts @@ -106,7 +106,7 @@ async function runIndex(searchClient: SearchIndexClient, bookmarkId: string) { } async function runDelete(searchClient: SearchIndexClient, bookmarkId: string) { - await searchClient.deleteDocument(bookmarkId); + await searchClient.deleteDocuments([bookmarkId]); } async function runSearchIndexing(job: DequeuedJob) { 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