feat: overhaul UI styling, improve templates, enhance services and tests
This commit is contained in:
+37
-13
@@ -90,12 +90,24 @@ def search_papers(
|
||||
|
||||
if match_expr:
|
||||
return _search_with_fts(
|
||||
db, match_expr, tag_join, tag_where, tag_params,
|
||||
sort, page, page_size, offset,
|
||||
db,
|
||||
match_expr,
|
||||
tag_join,
|
||||
tag_where,
|
||||
tag_params,
|
||||
sort,
|
||||
page,
|
||||
page_size,
|
||||
offset,
|
||||
)
|
||||
else:
|
||||
return _search_tag_only(
|
||||
db, tag, sort, page, page_size, offset,
|
||||
db,
|
||||
tag,
|
||||
sort,
|
||||
page,
|
||||
page_size,
|
||||
offset,
|
||||
)
|
||||
|
||||
|
||||
@@ -114,7 +126,11 @@ def _search_with_fts(
|
||||
params = {"query": match_expr, "limit": page_size, "offset": offset}
|
||||
params.update(tag_params)
|
||||
|
||||
order = "bm25(papers_fts)" if sort == "relevance" else "p.paper_date DESC, p.upvotes DESC"
|
||||
order = (
|
||||
"bm25(papers_fts)"
|
||||
if sort == "relevance"
|
||||
else "p.paper_date DESC, p.upvotes DESC"
|
||||
)
|
||||
|
||||
# ── 主查询:取 ID + rank + snippet ──
|
||||
rows_sql = text(f"""
|
||||
@@ -145,12 +161,11 @@ def _search_with_fts(
|
||||
total = db.execute(count_sql, params).scalar() or 0
|
||||
|
||||
paper_ids = [row[0] for row in fts_rows]
|
||||
snippets = {
|
||||
row[0]: {"title_zh": row[2], "abstract": row[3]}
|
||||
for row in fts_rows
|
||||
}
|
||||
snippets = {row[0]: {"title_zh": row[2], "abstract": row[3]} for row in fts_rows}
|
||||
|
||||
papers = _load_papers_by_ids(db, paper_ids, sort, {row[0]: row[1] for row in fts_rows})
|
||||
papers = _load_papers_by_ids(
|
||||
db, paper_ids, sort, {row[0]: row[1] for row in fts_rows}
|
||||
)
|
||||
|
||||
return {
|
||||
"results": papers,
|
||||
@@ -188,7 +203,10 @@ def _search_semantic(
|
||||
"JOIN paper_tags pt ON pt.paper_id = p.id" if tag else "",
|
||||
"AND pt.tag = :tag" if tag else "",
|
||||
{"tag": tag} if tag else {},
|
||||
sort, page, page_size, (page - 1) * page_size,
|
||||
sort,
|
||||
page,
|
||||
page_size,
|
||||
(page - 1) * page_size,
|
||||
)
|
||||
|
||||
# 按 arxiv_id 从 DB 加载完整数据
|
||||
@@ -218,7 +236,7 @@ def _search_semantic(
|
||||
# 分页
|
||||
total = len(papers)
|
||||
start = (page - 1) * page_size
|
||||
page_papers = papers[start:start + page_size]
|
||||
page_papers = papers[start : start + page_size]
|
||||
|
||||
return {
|
||||
"results": page_papers,
|
||||
@@ -239,7 +257,11 @@ def _search_tag_only(
|
||||
offset: int,
|
||||
) -> dict:
|
||||
"""只有标签筛选,无关键词。"""
|
||||
order = "p.paper_date DESC, p.upvotes DESC" if sort == "date" else "p.paper_date DESC, p.upvotes DESC"
|
||||
order = (
|
||||
"p.paper_date DESC, p.upvotes DESC"
|
||||
if sort == "date"
|
||||
else "p.paper_date DESC, p.upvotes DESC"
|
||||
)
|
||||
|
||||
rows_sql = text(f"""
|
||||
SELECT p.id
|
||||
@@ -249,7 +271,9 @@ def _search_tag_only(
|
||||
ORDER BY {order}
|
||||
LIMIT :limit OFFSET :offset
|
||||
""")
|
||||
rows = db.execute(rows_sql, {"tag": tag, "limit": page_size, "offset": offset}).fetchall()
|
||||
rows = db.execute(
|
||||
rows_sql, {"tag": tag, "limit": page_size, "offset": offset}
|
||||
).fetchall()
|
||||
|
||||
count_sql = text("""
|
||||
SELECT COUNT(DISTINCT p.id)
|
||||
|
||||
Reference in New Issue
Block a user