diff --git a/packages/backend/src/migration/1700331070890-note-text-fts-idx.ts b/packages/backend/src/migration/1700331070890-note-text-fts-idx.ts new file mode 100644 index 000000000..b0f6dfeb9 --- /dev/null +++ b/packages/backend/src/migration/1700331070890-note-text-fts-idx.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +export class NoteTextFtsIdx1700331070890 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS pg_trgm`); + const total = await queryRunner.query(`SELECT COUNT(*) FROM "note"`); + if (total && total.length > 0) { + const count = BigInt(total[0].count); + console.log(`Indexing the "note" table for full text search, please hang tight!`); + console.log(`You have ${count} notes in your database. This process will take an estimated ${count / 1000000n * 45n} seconds, though the exact duration depends on your hardware configuration.`); + } + await queryRunner.query(`CREATE INDEX IF NOT EXISTS "note_text_fts_idx" ON "note" USING gin ("text" gin_trgm_ops)`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX IF EXISTS "note_text_fts_idx"`); + await queryRunner.query(`DROP EXTENSION IF EXISTS pg_trgm`); + } +} diff --git a/packages/backend/src/models/entities/note.ts b/packages/backend/src/models/entities/note.ts index 4226a429f..21a39aa01 100644 --- a/packages/backend/src/models/entities/note.ts +++ b/packages/backend/src/models/entities/note.ts @@ -62,6 +62,7 @@ export class Note { }) public threadId: string | null; + @Index('note_text_fts_idx', { synchronize: false }) @Column("text", { nullable: true, })