From 0a4a4c766ca4284ac844ad0d5f842c4ccf63d01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Fri, 10 Jul 2026 15:18:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20search=5Fdocuments=20=E7=AB=AF=E7=82=B9?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=20traceback=20=E6=B3=84=E9=9C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/ingest_obsidian.py | 12 ------------ src/core/splitters/pdf.py | 11 +++++------ src/server/app.py | 12 +++++++++--- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/scripts/ingest_obsidian.py b/scripts/ingest_obsidian.py index 4cee4ef..e05cd80 100644 --- a/scripts/ingest_obsidian.py +++ b/scripts/ingest_obsidian.py @@ -63,18 +63,6 @@ for label, d in targets: skipped.append((f.name, size)) continue files.append((label, str(f))) -# 顶层 .md 文件 -for target_info in targets: - d = target_info[1] - p = Path(d) - if not p.exists(): - continue - for f in p.glob("*.md"): - sz = f.stat().st_size - if sz > MAX_SIZE: - skipped.append((f.name, sz)) - else: - files.append(("顶层/" + p.name, str(f))) log(f"待处理: {len(files)} 个文件") if skipped: diff --git a/src/core/splitters/pdf.py b/src/core/splitters/pdf.py index 255ac93..9ee745a 100644 --- a/src/core/splitters/pdf.py +++ b/src/core/splitters/pdf.py @@ -32,12 +32,11 @@ class PDFSplitter: pdf_path = text # text 参数实际是文件路径 extracted_pages = [] try: - doc = fitz.open(pdf_path) - for page in doc: - page_text = page.get_text() - if page_text.strip(): - extracted_pages.append(page_text) - doc.close() + with fitz.open(pdf_path) as doc: + for page in doc: + page_text = page.get_text() + if page_text.strip(): + extracted_pages.append(page_text) except Exception as e: logger.error("PDF 解析失败: %s — %s", pdf_path, e) raise ValueError(f"PDF 解析失败: {e}") from e diff --git a/src/server/app.py b/src/server/app.py index dc69e1d..179e934 100644 --- a/src/server/app.py +++ b/src/server/app.py @@ -150,9 +150,15 @@ def search_documents( state: AppState = Depends(get_state), _: bool = Depends(verify_api_key), ): - searcher = state.get_searcher(req.collection) - results = searcher.search(req.query, top_k=req.top_k) - return {"results": results, "collection": searcher.collection_name} + try: + searcher = state.get_searcher(req.collection) + results = searcher.search(req.query, top_k=req.top_k) + return {"results": results, "collection": searcher.collection_name} + except HTTPException: + raise + except Exception: + logger.exception("检索失败") + raise HTTPException(status_code=500, detail="服务器内部错误") @app.delete("/api/v1/documents/{file_name}")