diff --git a/backend/app/api/articles.py b/backend/app/api/articles.py index eec97ab..5eb6d38 100644 --- a/backend/app/api/articles.py +++ b/backend/app/api/articles.py @@ -60,8 +60,23 @@ async def list_articles( filters.append(Source.slug.in_(slugs)) if q: + # 搜索覆盖:原标题/原文 / 中文标题/译文 / 摘要 / 双 provider 评论 + # — 用户既可能搜原文也可能是译文(取决于记得哪个词) + # — 评论里的关键字能命中(配合 LLM 生成的中文评论做"主题搜索"很常见) + # 性能:ilike '%xxx%' 走不了 B-tree 索引,PG 会全表扫;文章量小(几千级)下 OK。 + # 未来 10w+ 文章量时改 PG full-text search(to_tsvector + GIN 索引) like = f"%{q}%" - filters.append(or_(Article.title.ilike(like), Article.body_text.ilike(like))) + filters.append( + or_( + Article.title.ilike(like), + Article.body_text.ilike(like), + Article.title_zh.ilike(like), + Article.body_zh_text.ilike(like), + Article.summary_zh.ilike(like), + Article.commentary.ilike(like), + Article.commentary_meituan.ilike(like), + ) + ) if lang == "zh": filters.append(Article.title_zh.is_not(None))