fix(search): filter message dates on createdAt instead of the id string (#1656)

This commit is contained in:
Hampus authored and GitHub committed 2026-08-15 22:41:51 +02:00
1 parent 578fd61d93
commit fb718e7e5b
2 files changed
+8 -2

No files matched your search

@@ -14,6 +14,7 @@ import type {
SearchableUser,
UserSearchFilters,
} from '@fluxer/schema/src/contracts/search/SearchDocumentTypes';
import {snowflakeToDate} from '@fluxer/snowflake/src/Snowflake';
import type {MeilisearchClient} from './MeilisearchClient';
import {
compactMeiliFilters,
@@ -45,6 +46,10 @@ interface MeilisearchAdapterOptions {
client: MeilisearchClient;
}
function snowflakeSeconds(snowflake: string): number {
return Math.floor(snowflakeToDate(BigInt(snowflake)).getTime() / 1000);
}
function buildMessageFilters(filters: MessageSearchFilters): Array<MeilisearchFilter | undefined> {
const clauses: Array<MeilisearchFilter | undefined> = [];
if (filters.guildId) clauses.push(meiliTermFilter('guildId', filters.guildId));
@@ -109,8 +114,8 @@ function buildMessageFilters(filters: MessageSearchFilters): Array<MeilisearchFi
if (filters.excludeAttachmentExtensions && filters.excludeAttachmentExtensions.length > 0) {
clauses.push(...meiliExcludeAny('attachmentExtensions', filters.excludeAttachmentExtensions));
}
if (filters.maxId != null) clauses.push(meiliRangeFilter('id', {lt: filters.maxId}));
if (filters.minId != null) clauses.push(meiliRangeFilter('id', {gt: filters.minId}));
if (filters.maxId != null) clauses.push(meiliRangeFilter('createdAt', {lt: snowflakeSeconds(filters.maxId)}));
if (filters.minId != null) clauses.push(meiliRangeFilter('createdAt', {gt: snowflakeSeconds(filters.minId)}));
return compactMeiliFilters(clauses);
}
@@ -17,6 +17,7 @@ export const MEILISEARCH_INDEX_DEFINITIONS: Record<FluxerSearchIndexName, Meilis
searchableAttributes: ['content', 'embedContent'],
filterableAttributes: [
'id',
'createdAt',
'channelId',
'guildId',
'authorId',