diff --git a/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.test.ts b/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.test.ts index 10202f6eb..fff524ded 100644 --- a/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.test.ts +++ b/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.test.ts @@ -29,7 +29,7 @@ class FakeMeilisearchClient implements MeilisearchClient { this.indexExists = true; return this.nextTask() as TResponse; } - if (method === 'PUT' && path.includes('/settings/')) { + if ((method === 'PUT' || method === 'PATCH') && path.includes('/settings/')) { return this.nextTask() as TResponse; } if (method === 'POST' && path.endsWith('/documents')) { @@ -75,8 +75,12 @@ describe('MeilisearchMessageAdapter', () => { 'PUT /indexes/messages/settings/searchable-attributes', 'PUT /indexes/messages/settings/filterable-attributes', 'PUT /indexes/messages/settings/sortable-attributes', + 'PATCH /indexes/messages/settings/pagination', ]); - expect(client.waitedTaskUids).toEqual([1, 2, 3, 4]); + expect(client.waitedTaskUids).toEqual([1, 2, 3, 4, 5]); + expect(client.requests.find((request) => request.path.endsWith('/settings/pagination'))?.body).toEqual({ + maxTotalHits: 10000, + }); }); it('builds Meilisearch search requests from message filters', async () => { @@ -127,6 +131,6 @@ describe('MeilisearchMessageAdapter', () => { expect(client.waitedTaskUids).toEqual([]); await adapter.refreshIndex(); - expect(client.waitedTaskUids).toEqual([4]); + expect(client.waitedTaskUids).toEqual([5]); }); }); diff --git a/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.ts b/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.ts index e975778ef..86eca913f 100644 --- a/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.ts +++ b/fluxer_api/src/api/search/meilisearch/MeilisearchIndexAdapter.ts @@ -7,6 +7,7 @@ import {joinMeiliFilters} from './MeilisearchFilterUtils'; import type {MeilisearchIndexDefinition} from './MeilisearchIndexDefinitions'; const MAX_SEARCH_LIMIT = 1000; +const MAX_TOTAL_HITS = 10000; interface MeilisearchIndexAdapterOptions { client: MeilisearchClient; @@ -57,9 +58,10 @@ export class MeilisearchIndexAdapter< await this.waitForTask(task.taskUid); } await Promise.all([ - this.applySetting('searchable-attributes', this.indexDefinition.searchableAttributes), - this.applySetting('filterable-attributes', this.indexDefinition.filterableAttributes), - this.applySetting('sortable-attributes', this.indexDefinition.sortableAttributes), + this.applySetting('PUT', 'searchable-attributes', this.indexDefinition.searchableAttributes), + this.applySetting('PUT', 'filterable-attributes', this.indexDefinition.filterableAttributes), + this.applySetting('PUT', 'sortable-attributes', this.indexDefinition.sortableAttributes), + this.applySetting('PATCH', 'pagination', {maxTotalHits: MAX_TOTAL_HITS}), ]); this.initialized = true; } @@ -177,9 +179,13 @@ export class MeilisearchIndexAdapter< } } - private async applySetting(setting: string, value: Array): Promise { + private async applySetting( + method: 'PUT' | 'PATCH', + setting: string, + value: Array | {maxTotalHits: number}, + ): Promise { const task = await this.client.request( - 'PUT', + method, `/indexes/${encodeURIComponent(this.indexDefinition.uid)}/settings/${setting}`, value, );