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