diff --git a/apps/server/src/core/page/entities/page.entity.ts b/apps/server/src/core/page/entities/page.entity.ts index e182017..0067e18 100644 --- a/apps/server/src/core/page/entities/page.entity.ts +++ b/apps/server/src/core/page/entities/page.entity.ts @@ -8,6 +8,7 @@ import { JoinColumn, OneToMany, DeleteDateColumn, + Index, } from 'typeorm'; import { User } from '../../user/entities/user.entity'; import { Workspace } from '../../workspace/entities/workspace.entity'; @@ -15,6 +16,7 @@ import { Comment } from '../../comment/entities/comment.entity'; import { PageHistory } from './page-history.entity'; @Entity('pages') +@Index('pages_tsv_idx', ['tsv']) export class Page { @PrimaryGeneratedColumn('uuid') id: string; @@ -36,9 +38,6 @@ export class Page { @Column({ type: 'tsvector', - generatedType: 'STORED', - asExpression: - "setweight(to_tsvector('english', coalesce(pages.title, '')), 'A') || setweight(to_tsvector('english', coalesce(pages.\"textContent\", '')), 'B')", select: false, nullable: true, }) diff --git a/apps/server/src/database/migrations/1706450034470-AddTsvectorColumn.ts b/apps/server/src/database/migrations/1706450034470-AddTsvectorColumn.ts new file mode 100644 index 0000000..d335dba --- /dev/null +++ b/apps/server/src/database/migrations/1706450034470-AddTsvectorColumn.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddTsvectorColumn1706450034470 implements MigrationInterface { + name = 'AddTsvectorColumn1706450034470'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "pages" ADD "tsv" tsvector`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "pages" DROP COLUMN "tsv"`); + } +} diff --git a/apps/server/src/database/migrations/1706450034471-AddTsvectorTrigger.ts b/apps/server/src/database/migrations/1706450034471-AddTsvectorTrigger.ts new file mode 100644 index 0000000..f0b2c74 --- /dev/null +++ b/apps/server/src/database/migrations/1706450034471-AddTsvectorTrigger.ts @@ -0,0 +1,28 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddTsvectorTrigger1706450034471 implements MigrationInterface { + name = 'AddTsvectorTrigger1706450034471'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE FUNCTION pages_tsvector_trigger() RETURNS trigger AS $$ + begin + new.tsv := + setweight(to_tsvector('english', coalesce(new.title, '')), 'A') || + setweight(to_tsvector('english', coalesce(new.\"textContent\", '')), 'B'); + return new; + end; + $$ LANGUAGE plpgsql; + `); + + await queryRunner.query(` + CREATE TRIGGER pages_tsvector_update BEFORE INSERT OR UPDATE + ON pages FOR EACH ROW EXECUTE FUNCTION pages_tsvector_trigger(); + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP TRIGGER pages_tsvector_update ON Pages`); + await queryRunner.query(`DROP FUNCTION pages_tsvector_trigger`); + } +} diff --git a/apps/server/src/database/migrations/1706453158729-AddIndexTSVColumn.ts b/apps/server/src/database/migrations/1706453158729-AddIndexTSVColumn.ts index 4ecb252..22dfd58 100644 --- a/apps/server/src/database/migrations/1706453158729-AddIndexTSVColumn.ts +++ b/apps/server/src/database/migrations/1706453158729-AddIndexTSVColumn.ts @@ -4,10 +4,11 @@ export class AddIndexTSVColumn1706453158729 implements MigrationInterface { name = 'AddIndexTSVColumn1706453158729' public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`CREATE INDEX pages_tsv_index ON pages USING GIN ("tsv");`); + await queryRunner.query(`DROP INDEX IF EXISTS pages_tsv_idx;`); + await queryRunner.query(`CREATE INDEX pages_tsv_idx ON pages USING GIN ("tsv");`); } public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`DROP INDEX IF EXISTS pages_tsv_index;`); + await queryRunner.query(`DROP INDEX IF EXISTS pages_tsv_idx;`); } }