Files
termi-blog/backend/migration/src/m20260328_000004_add_posts_search_index.rs

47 lines
1.5 KiB
Rust

use sea_orm_migration::prelude::*;
use sea_orm_migration::sea_orm::DbBackend;
#[derive(DeriveMigrationName)]
pub struct Migration;
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
if manager.get_database_backend() != DbBackend::Postgres {
return Ok(());
}
manager
.get_connection()
.execute_unprepared(
r#"
CREATE INDEX IF NOT EXISTS idx_posts_search_fts
ON posts
USING GIN (
(
setweight(to_tsvector('simple', coalesce(title, '')), 'A') ||
setweight(to_tsvector('simple', coalesce(description, '')), 'B') ||
setweight(to_tsvector('simple', coalesce(category, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(tags::text, '')), 'C') ||
setweight(to_tsvector('simple', coalesce(content, '')), 'D')
)
);
"#,
)
.await?;
Ok(())
}
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
if manager.get_database_backend() != DbBackend::Postgres {
return Ok(());
}
manager
.get_connection()
.execute_unprepared("DROP INDEX IF EXISTS idx_posts_search_fts;")
.await?;
Ok(())
}
}