乐于分享
好东西不私藏

药品说明书上传全流程解析:从 PDF 到向量数据库的奇妙旅程

药品说明书上传全流程解析:从 PDF 到向量数据库的奇妙旅程

导读: 当你轻点"上传"按钮,一份平平无奇的药品说明书便开启了它的"数字化变形记"。从人类可读的 PDF 文档,到 AI 能"读懂"的向量数据,这背后藏着一整套精密的技术逻辑。本文将用最通俗的语言,拆解这份说明书如何一步步被拆解、转化,最终成为 AI 问答的"知识基石"。


一、引言:一次上传,一场"知识拆解工程"

想象一下:你手里有一份 10 页的《奥美拉唑肠溶胶囊说明书》,对人来说,这是一份完整的用药指南;但对 AI 而言,它只是一串无意义的字符,必须被"拆解开、标上签、存进库",才能在你问"这个药怎么吃"时,精准找到"用法用量"那一段。

这个过程,就像把一本厚书拆成单页、给每页贴分类标签、再放进智能书架——而我们今天,就要钻进这个"智能书架"的后台,看看它到底是怎么工作的。


二、第一关:文件校验与去重——给文件做"门卫安检"

上传的第一步,不是解析内容,而是先"拦着"不合格的文件,杜绝重复的文件,就像图书馆入口的安检员,只放"合规且全新"的书籍进门。

2.1 先查"身份":类型和大小要合规

系统会先检查文件是不是"自己人"(支持的格式),有没有"超重"(大小超限):

# 代码片段 1:严格的入场安检(第319-327行)if suffix notin SUPPORTED_UPLOAD_EXTENSIONS:raise HTTPException(status_code=415, detail="暂不支持该文件类型")iflen(content) > MAX_UPLOAD_BYTES:raise HTTPException(status_code=413, detail="文件超过10MB限制")

💡 通俗理解: 只允许 PDF/TXT/MD/DOCX 格式的文件进门,且文件大小不能超过 10MB(差不多相当于 5000 页纯文本),太大的"行李"一律不收。

2.2 再查"指纹":避免重复入库

同一篇说明书可能被命名为"奥美拉唑.pdf""奥美拉唑肠溶胶囊.pdf",但内容完全一样——总不能存十份一样的吧?系统会给文件生成唯一"指纹"(MD5 哈希值),查一查是不是已经存过了:

# 代码片段 2:给文件生成唯一"指纹"(第329行)incoming_doc_id = _content_md5(content)# 检查是否已存在相同指纹(第335-353行)duplicate_chunks = [chunk for chunk in existing_chunks if chunk.doc_id == incoming_doc_id]if duplicate_chunks:return UploadResponse(action="skipped"                          message="相同文件内容已入库,本次上传已跳过")

💡 通俗理解: 就像给每个文件办一张"身份证",身份证号(MD5 值)一样,就说明是同一个人,直接"免登记",省空间、省时间。


三、第二关:文档解析与切割——给说明书做"外科手术"

通过安检的文件,接下来要被"拆解开"—不是乱拆,而是按 "章节分大块,大块分小块" 的策略,既保证结构清晰,又保证 AI 能"啃得动"。

3.1 第一刀:按章节拆(先分"大骨架")

系统会先识别说明书里的【药品名称】【成份】【适应症】等章节标记,把文档按章节拆成一个个"大模块":

# 代码片段 3:识别【章节名】标记(第572-588行)def_extract_upload_sections(text: str):    matches = list(re.finditer(r"【([^】]{1,40})】", text))# 提取每个【】之间的内容作为章节名# 将两个章节之间的文本归为该章节的内容

举个例子:

原文内容
切割后的结构化数据
【药品名称】奥美拉唑肠溶胶囊
("药品名称", "奥美拉唑肠溶胶囊")
【成份】本品主要成份为奥美拉唑
("成份", "本品主要成份为奥美拉唑")
【适应症】用于胃溃疡、十二指肠溃疡
("适应症", "用于胃溃疡、十二指肠溃疡")
【用法用量】口服,成人一次1-2片
("用法用量", "口服,成人一次1-2片")

💡 通俗理解: 就像把一本书按"前言、目录、正文、附录"拆成几大部分,先分清"哪部分是讲什么的"。

3.2 第二刀:按窗口切片(再分"小肉块")

每个章节的内容可能很长,AI 一次"看不完",所以要切成更小的片段,还得留"重叠区",避免关键信息在"切口处"丢失:

# 代码片段 4:按900字符窗口切片,重叠120字符(第551-569行)def_split_upload_text(text: str, chunk_size=900, chunk_overlap=120):while start < len(text):        end = min(len(text), start + chunk_size)# 尝试在句号、分号处截断,保持语义完整        cut = max(window.rfind("。"), window.rfind(";"))        start = max(0, end - chunk_overlap)  # 设置重叠

💡 通俗理解: 就像切香肠,每段切 900 字符长,但两段之间重叠 120 字符——比如第一段最后 120 字符是"也可用于十二指肠溃疡",第二段开头也包含这 120 字符,避免"切到一半,语义断了"。

实际效果:

Chunk 1: "...用于治疗胃溃疡。也可用于十二指肠溃疡..."         ↑___________900字符___________↑              ↑__重叠120字符__↑Chunk 2:      "...也可用于十二指肠溃疡。不良反应包括..."

3.3 给每个小块发"身份证":层级化 ID

拆好的每个小片段,都会得到一个唯一的 ID,从 ID 就能看出它"属于哪个文档、哪个章节、第几块":

# 代码片段 5:每个chunk获得唯一身份证(第499行)chunk_id = f"{doc_id}:{section_index:03d}:{chunk_index:03d}"# 示例:a3f2b8c9:000:000 表示文档a3f2b8c9的第0章第0块

💡 通俗理解: 就像快递单号——"SF123456:01:02",一看就知道是顺丰 123456 这个包裹里,第 1 个箱子的第 2 件物品,管理起来一目了然。


四、第三关:三重持久化——把拆解后的内容"存好"

拆完的片段不能丢,系统会把数据存到三个地方,各司其职,既保证"能溯源",又保证"能复用"。

4.1 存原始文件:留"底档"

先把上传的 PDF 原文件存起来,作为"原始凭证",未来想重新解析、人工核查都能用:

# 代码片段 6:保存PDF原文件(第361行)saved_path = _save_upload_bytes(original_name, content)# 路径:data/uploads/奥美拉唑肠溶胶囊.pdf

💡 通俗理解: 就像你把纸质文件扫描后,既存了电子版,也留着纸质版,不怕电子版出问题。

4.2 存独立 JSONL:给单文档建"个人档案"

每个文档的所有小片段,会单独存成一个 JSONL 文件,方便后续给这个文档单独建索引、删改:

# 代码片段 7:每个文档有自己的JSONL文件(第379-381行)upload_jsonl = UPLOAD_JSONL_DIR / f"{document.doc_id}.jsonl"write_jsonl(chunks, upload_jsonl)# 路径:data/processed/uploads/a3f2b8c9.jsonl

文件内容示例:

{"chunk_id":"a3f2b8c9:000:000","text":"【药品名称】奥美拉唑...","section":"药品名称",...}{"chunk_id":"a3f2b8c9:000:001","text":"【适应症】用于胃溃疡...","section":"适应症",...}

💡 通俗理解: 就像每个人的个人档案袋,只装自己的资料,想查谁的、改谁的,直接拿对应的档案袋就行。

4.3 存 Master JSONL:建"全局花名册"

所有文档的小片段,都会追加到一个全局的 JSONL 文件里,相当于"全公司的员工花名册":

# 代码片段 8:追加到全局文件(第383行)_append_chunks(chunks, MASTER_JSONL)# 路径:data/processed/all_drug_chunks.jsonl

💡 关键: 这里用**"追加"而不是"覆盖"**!如果覆盖,每次上传新文件都会清空旧数据,系统永远只认识最后一个药;而追加就像花名册加新人,旧人还在,新人也来。下面是一个直观对比:

操作
第一次上传(奥美拉唑)
第二次上传(坎地沙坦酯)
第三次上传(氯雷他定)
追加模式
花名册 22 行
花名册 56 行(22+34)
花名册 74 行(56+18)
覆盖模式
花名册 22 行
花名册 34 行(旧数据丢失)
花名册 18 行(旧数据丢失)

五、第四关:向量化与索引构建——给 AI"装上懂行的脑子"

拆好、存好的文字,AI 还"看不懂",得把文字变成"数字指纹"(向量),再存进向量数据库,AI 才能快速找到"语义相似"的内容。

5.1 第一步:把文字变成"数字指纹"(Embedding)

Embedding 模型会把每一段文字,转换成一串 512 个数字组成的向量——语义越像,数字指纹越接近:

# 代码片段 9:创建Embedding模型(第47-53行)embeddings = build_embeddings(    provider=embedding_provider,  # 如 "dashscope" 或 "hash"    model=embedding_model,    dimensions=512,  # 每个向量512维)# 提取所有chunk的文本(第57行)texts = [chunk.text for chunk in chunks]# 转换为向量并存入Chroma(第73行)vector_store.add_texts(texts=texts, metadatas=metadatas, ids=ids)

💡 通俗理解: 就像把每句话变成一幅画,Embedding 模型把这幅画压缩成 512 个"颜色值"—"奥美拉唑治胃溃疡"和"奥美拉唑治十二指肠溃疡"的画长得像,颜色值也几乎一样,AI 一眼就能认出来。

向量相似度示例:

"奥美拉唑用于治疗胃溃疡"      → [0.23, -0.45, 0.78, ..., 0.12] (512维)"奥美拉唑主治十二指肠溃疡"    → [0.25, -0.43, 0.76, ..., 0.14] (512维)# 两个向量非常接近 → 余弦相似度 ≈ 0.97# 因为语义极其相似!

5.2 第二步:把指纹存进"智能书架"(Chroma 向量库)

向量不会乱存,会放进 Chroma 向量数据库——这个数据库就像带"智能导航"的书架,能快速找到"指纹相似"的内容:

# 代码片段 10:初始化Chroma(第63-69行)Path(persist_dir).mkdir(parents=True, exist_ok=True)vector_store = Chroma(    collection_name="drug_chunks",    persist_directory="data/chroma",    embedding_function=embeddings,)

Chroma 的存储结构:

data/chroma/├── chroma.sqlite3          # SQLite数据库,存储元数据和ID映射├── data_level0.bin         # HNSW向量索引(核心检索结构)├── header.bin              # 索引头信息├── length.bin              # 向量数量└── link_lists.bin          # HNSW图结构链接

💡 通俗理解: Chroma 里的 HNSW 算法,就像在多维空间里给向量建了"高速公路网"—要找相似向量,不用挨个查(慢),走"高速"能直接定位(快),检索速度从"数小时"变成"毫秒级"。


六、第五关:目录聚合——给 AI 做"快速检索目录"

如果用户问"系统里有哪些降压药",总不能挨个查 5000 个小片段吧?系统会建一个"精简目录",把关键信息汇总,提速 200 倍!

6.1 构建 Catalog:汇总关键元数据

系统会从全局 JSONL 里提取每个文档的核心信息,生成一个极简的目录文件:

# 代码片段 11:重建catalog(第413行)catalog = build_metadata_catalog(MASTER_JSONL, settings.catalog_path)

核心逻辑就是"去繁就简":

# 读取all_drug_chunks.jsonl(可能5000+行)for chunk in read_jsonl(jsonl_path):    grouped[chunk.doc_id].append(chunk)# 按doc_id聚合,每个文档只保留一条元数据记录drugs.append({"doc_id": doc_id,"drug_name": first.drug_name,"generic_name": first.generic_name,"sections": ["药品名称""适应症", ...],  # 所有章节名"chunk_count"34,  # 该文档有多少个chunks})

6.2 Catalog 的威力:200 倍提速!

场景
❌ 无 Catalog
✅ 有 Catalog
用户提问
"系统里有哪些降压药?"
"系统里有哪些降压药?"
执行操作
遍历 5000 个 chunks → 提取 drug_name → 去重统计
读取 catalog.json(仅 10 条记录)→ 过滤 category
耗时
2 秒10 毫秒
提速倍数
200 倍
 🚀

💡 通俗理解: 就像查字典,没有目录要翻整本,有目录直接翻到"J"开头,快到飞起——这就是 "用空间换时间",多存一个 10KB 的小文件,换 200 倍的速度提升。


七、第六关:缓存清理——给系统"刷新内存"

系统会把常用的东西(比如向量库连接、Catalog 数据)存在内存里(LRU 缓存),新数据入库后,旧缓存就"过时了",必须清理:

# 代码片段 12:清理LRU缓存(第415-416行)get_runtime.cache_clear()   # 清除向量库连接缓存get_catalog.cache_clear()   # 清除catalog缓存

💡 通俗理解: 就像浏览器缓存,网站更新后你要按 Ctrl+F5 刷新,才能看到最新内容——不清理缓存,用户查到的还是"旧数据",比如明明传了新的降压药,却显示"没有"。


八、总结:一次上传的完整"旅程图"

把整个流程串起来,就是这样一条清晰的路径:

用户上传PDF    ↓┌─────────────────────────────────────┐│        【校验层】                    ││  类型检查(PDF/TXT/MD/DOCX)         ││  + MD5哈希去重                       │└─────────────────────────────────────┘    ↓┌─────────────────────────────────────┐│        【解析层】                    ││  章节识别(正则匹配【】标记)         ││  → 窗口切片(900字符+120重叠)       ││  → 生成层级化Chunk ID                │└─────────────────────────────────────┘    ↓┌─────────────────────────────────────┐│        【持久化层】(三重存储)        ││  ├─ data/uploads/原始PDF             ││  ├─ data/processed/uploads/{doc_id}.jsonl  ││  └─ data/processed/all_drug_chunks.jsonl   │└─────────────────────────────────────┘    ↓┌─────────────────────────────────────┐│        【索引层】                    ││  ├─ Chroma向量数据库(data/chroma/) ││  └─ 摘要索引(drug_summaries集合)   │└─────────────────────────────────────┘    ↓┌─────────────────────────────────────┐│        【目录层】                    ││  data/processed/drug_catalog.json   │└─────────────────────────────────────┘    ↓┌─────────────────────────────────────┐│        【缓存层】                    ││  清理LRU缓存                        │└─────────────────────────────────────┘    ↓返回成功响应 ✅

九、技术亮点:藏在细节里的"巧思"

序号
技术亮点
一句话解释
类比
1️⃣
职责分离
原始文件、片段、向量、目录分开存,改一处不影响其他
衣柜、书柜、冰箱各司其职
2️⃣
层级化 ID
doc_id:section:chunk 的结构,既唯一又能看出层级
快递单号一样清晰
3️⃣
追加模式
全局 JSONL 只加不减,保留完整历史
花名册不断加新人
4️⃣
空间换时间
10KB 的 Catalog 换 200 倍速度
字典目录省翻书时间
5️⃣
语义保护
900 字符切片 + 120 字符重叠,不切断句子
香肠重叠切法保完整

十、结语:这是 RAG 系统的"半壁江山"

药品说明书的上传流程,看似只是"存文件",实则是 RAG(检索增强生成)系统的核心——把非结构化的 PDF,变成 AI 能快速检索的结构化知识。

当你问"奥美拉唑怎么吃"时,AI 能毫秒级找到答案,背后就是这套流程在"打底":把说明书拆成小块、变成向量、存进智能库、快速检索。理解了这个过程,你就懂了 RAG 系统的一半逻辑。  

📌 下期预告:《从向量检索到智能问答:RAG 系统的检索链路深度解析》

💬 欢迎留言讨论:你认为还有哪些优化空间?表格类内容如何处理?我们下期见!

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-04 10:17:24 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/707146.html
  2. 运行时间 : 0.275928s [ 吞吐率:3.62req/s ] 内存消耗:4,829.45kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=641cfd7dfa92e2b9d2ab3984f498a96e
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.003802s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000975s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.018766s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000396s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000767s ]
  6. SELECT * FROM `set` [ RunTime:0.000308s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000766s ]
  8. SELECT * FROM `article` WHERE `id` = 707146 LIMIT 1 [ RunTime:0.000944s ]
  9. UPDATE `article` SET `lasttime` = 1780539444 WHERE `id` = 707146 [ RunTime:0.030933s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000393s ]
  11. SELECT * FROM `article` WHERE `id` < 707146 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000668s ]
  12. SELECT * FROM `article` WHERE `id` > 707146 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000549s ]
  13. SELECT * FROM `article` WHERE `id` < 707146 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004985s ]
  14. SELECT * FROM `article` WHERE `id` < 707146 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.009467s ]
  15. SELECT * FROM `article` WHERE `id` < 707146 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013398s ]
0.280261s