"""刷新 search_keywords(立即跑一次,不依赖 worker 03:00 调度)。 历史: - 最初版本是回灌 search_title_suggestions(articles trigger 维护的真实标题) - 0011 迁移删了 search_title_suggestions(产品决定只展示 keyword 续接词) - 现在脚本只做一件事:立即跑一次 refresh_search_keywords() 用法: docker compose exec api python -m app.scripts.refresh_search_keywords # 预期: search_keywords refreshed 性能:ts_stat 1545 篇文章全量聚合 ~88s(每天 worker 03:00 会自动跑一次,通常不需要手动) """ from __future__ import annotations import asyncio import logging import sys from sqlalchemy import text from app.database import AsyncSessionLocal logger = logging.getLogger("news.refresh_keywords") logging.basicConfig( level="INFO", format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", ) async def refresh() -> None: async with AsyncSessionLocal() as s: await s.execute(text("SELECT refresh_search_keywords()")) await s.commit() logger.info("search_keywords refreshed") def main() -> int: try: asyncio.run(refresh()) except KeyboardInterrupt: logger.warning("interrupted") return 1 return 0 if __name__ == "__main__": sys.exit(main())