47 lines
1.5 KiB
Rust
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(())
|
|
}
|
|
}
|