feat: add compare, trends routes, embedder service, and phase5 tests
This commit is contained in:
+24
-17
@@ -31,11 +31,12 @@ def search_page(
|
||||
q: str = Query(default=""),
|
||||
tag: str = Query(default=""),
|
||||
sort: str = Query(default="relevance"),
|
||||
mode: str = Query(default="keyword"),
|
||||
page: int = Query(default=1, ge=1),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""搜索页面。"""
|
||||
result = search_papers(db, query=q or None, tag=tag or None, sort=sort, page=page)
|
||||
"""搜索页面,支持 keyword 和 semantic 模式。"""
|
||||
result = search_papers(db, query=q or None, tag=tag or None, sort=sort, page=page, mode=mode)
|
||||
all_tags = get_all_tags(db)
|
||||
|
||||
return templates.TemplateResponse(
|
||||
@@ -45,8 +46,11 @@ def search_page(
|
||||
"query": q,
|
||||
"tag": tag,
|
||||
"sort": sort,
|
||||
"mode": mode,
|
||||
"chroma_enabled": settings.CHROMA_ENABLED,
|
||||
"results": result["results"],
|
||||
"snippets": result["snippets"],
|
||||
"distances": result.get("distances", {}),
|
||||
"total": result["total"],
|
||||
"page": result["page"],
|
||||
"total_pages": result["total_pages"],
|
||||
@@ -65,28 +69,31 @@ def search_api(
|
||||
q: str = Query(default=""),
|
||||
tag: str = Query(default=""),
|
||||
sort: str = Query(default="relevance"),
|
||||
mode: str = Query(default="keyword"),
|
||||
page: int = Query(default=1, ge=1),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""搜索 JSON API。"""
|
||||
result = search_papers(db, query=q or None, tag=tag or None, sort=sort, page=page)
|
||||
"""搜索 JSON API,支持 keyword 和 semantic 模式。"""
|
||||
result = search_papers(db, query=q or None, tag=tag or None, sort=sort, page=page, mode=mode)
|
||||
distances = result.get("distances", {})
|
||||
|
||||
items = []
|
||||
for paper in result["results"]:
|
||||
snippet = result["snippets"].get(paper.id, {})
|
||||
items.append(
|
||||
{
|
||||
"arxiv_id": paper.arxiv_id,
|
||||
"title_en": paper.title_en,
|
||||
"title_zh": paper.title_zh,
|
||||
"paper_date": paper.paper_date.isoformat() if paper.paper_date else None,
|
||||
"upvotes": paper.upvotes,
|
||||
"tags": [t.tag for t in paper.tags],
|
||||
"authors": [a.name for a in paper.authors],
|
||||
"snippet_title_zh": snippet.get("title_zh"),
|
||||
"snippet_abstract": snippet.get("abstract"),
|
||||
}
|
||||
)
|
||||
item = {
|
||||
"arxiv_id": paper.arxiv_id,
|
||||
"title_en": paper.title_en,
|
||||
"title_zh": paper.title_zh,
|
||||
"paper_date": paper.paper_date.isoformat() if paper.paper_date else None,
|
||||
"upvotes": paper.upvotes,
|
||||
"tags": [t.tag for t in paper.tags],
|
||||
"authors": [a.name for a in paper.authors],
|
||||
"snippet_title_zh": snippet.get("title_zh"),
|
||||
"snippet_abstract": snippet.get("abstract"),
|
||||
}
|
||||
if paper.arxiv_id in distances:
|
||||
item["distance"] = distances[paper.arxiv_id]
|
||||
items.append(item)
|
||||
|
||||
return {
|
||||
"results": items,
|
||||
|
||||
Reference in New Issue
Block a user