后端: - alembic 0009: 两张固化表 + GIN prefix_keys 索引 + articles trigger - /api/v1/search/suggestions: 混合 A(高频词 ts_stat) + B(真实标题) + 冷启动 fallback - worker 每日 03:00 + 启动时刷新 search_keywords - 顺便填 commit 11 TODO: articles.title_zh_tsv + GIN 索引(未来 FTS 基础) 前端: - NInput -> NAutoComplete + debounce 250ms - 选标题 -> 跳详情;选关键词 -> 填入 + 触发搜索 - AbortController 防 race condition 性能: prefix_keys @> ARRAY[prefix] 走 GIN 亚毫秒,100w 行也稳
25 lines
566 B
Python
25 lines
566 B
Python
"""搜索建议 schema。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class SearchTitleSuggestionItem(BaseModel):
|
|
id: int # article_id
|
|
published_at: datetime | None = None
|
|
lang: str # 'zh' / 'src'
|
|
|
|
|
|
class SearchKeywordItem(BaseModel):
|
|
word: str
|
|
weight: int
|
|
source: str # 'ts_stat' / 'title_extract' / 'manual' / 'ts_stat_live'
|
|
|
|
|
|
class SearchSuggestionsResponse(BaseModel):
|
|
query: str
|
|
titles: list[SearchTitleSuggestionItem] = []
|
|
keywords: list[SearchKeywordItem] = []
|