乐于分享
好东西不私藏

RAGFlow源码解析-9、文档解析器实现深度解析(第七周)

RAGFlow源码解析-9、文档解析器实现深度解析(第七周)

一、文档解析器工厂架构

1.1 解析器工厂映射表

源码位置rag/svr/task_executor.py:84-101

FACTORY = {    "general": naive,                          # 通用解析器    ParserType.NAIVE.value: naive,             # Naive解析器(默认)    ParserType.PAPER.value: paper,             # 学术论文解析器    ParserType.BOOK.value: book,               # 书籍解析器    ParserType.PRESENTATION.value: presentation, # 演示文稿解析器    ParserType.MANUAL.value: manual,           # 手册文档解析器    ParserType.LAWS.value: laws,               # 法律文档解析器    ParserType.QA.value: qa,                   # 问答文档解析器    ParserType.TABLE.value: table,             # 表格文档解析器    ParserType.RESUME.value: resume,           # 简历解析器    ParserType.PICTURE.value: picture,         # 图片解析器    ParserType.ONE.value: one,                 # 单页文档解析器    ParserType.AUDIO.value: audio,             # 音频解析器    ParserType.EMAIL.value: email,             # 邮件解析器    ParserType.KG.value: naive,                # 知识图谱解析器(使用naive)    ParserType.TAG.value: tag                  # 标签解析器}

解析器分类表

解析器类型
适用文档
特殊处理
文件格式
naive
通用文档
标准分块
PDF、DOCX、TXT、HTML
paper
学术论文
提取标题、作者、摘要
PDF
book
书籍
层次化合并、目录移除
PDF、DOCX、TXT
manual
操作手册
层级标题识别
PDF、DOCX
laws
法律文档
条款编号识别
PDF、DOCX
qa
问答文档
QA配对提取
PDF、DOCX、TXT
table
表格文档
表格优先解析
PDF、EXCEL
resume
简历
结构化信息提取
PDF、DOCX
presentation
演示文稿
Slide分块
PPTX、PDF
picture
图片文档
OCR+图像理解
PNG、JPG
audio
音频文件
语音转文本
MP3、WAV
email
邮件文档
邮件结构解析
EML
tag
标签文档
标签提取
PDF、TXT

解析器选择流程图


二、Paper学术论文解析器

2.1 Pdf类继承关系

源码位置rag/app/paper.py:31-141

class Pdf(PdfParser):  # 第31行:继承PdfParser基类    def __init__(self):        self.model_speciess = ParserType.PAPER.value  # 第33行:指定为PAPER类型        super().__init__()    def __call__(self, filename, binary=None, from_page=0, to_page=100000, zoomin=3, callback=None):        from timeit import default_timer as timer        # 第38-48行:OCR阶段        start = timer()        callback(msg="OCR started")        self.__images__(filename if not binary else binary, zoomin, from_page, to_page, callback)        callback(msg="OCR finished ({:.2f}s)".format(timer() - start))        # 第50-53行:布局识别        start = timer()        self._layouts_rec(zoomin)        callback(0.63"Layout analysis ({:.2f}s)".format(timer() - start))        # 第55-58行:表格分析        start = timer()        self._table_transformer_job(zoomin)        callback(0.68"Table analysis ({:.2f}s)".format(timer() - start))        # 第59-65行:文本合并        start = timer()        self._text_merge()        tbls = self._extract_table_figure(True, zoomin, TrueTrue)        column_width = np.median([b["x1"] - b["x0"for b in self.boxes])        self._concat_downward()        self._filter_forpages()        callback(0.75"Text merged ({:.2f}s)".format(timer() - start))        # 第68-74行:双栏布局处理        if column_width < self.page_images[0].size[0] / zoomin / 2:            logging.debug("two_column...................")            self.boxes = self.sort_X_by_page(self.boxes, column_width / 2)        for b in self.boxes:            b["text"] = re.sub(r"([\t  ]|\u3000){2,}"" ", b["text"].strip())        # 第75-78行:定义章节开始模式        def _begin(txt):            return re.match(                "[0-9. 一、i]*(introduction|abstract|摘要|引言|keywords|key words|关键词|background|背景|目录|前言|contents)",                txt.lower().strip())        # 第80-88行:跳过首页处理        if from_page > 0:            return {                "title""",                "authors""",                "abstract""",                "sections": [(b["text"] + self._line_tag(b, zoomin), b.get("layoutno""")) for b in self.boxes if                             re.match(r"(text|title)", b.get("layoutno""text"))],                "tables": tbls            }        # 第89-106行:提取标题和作者        title = ""        authors = []        i = 0        while i < min(32len(self.boxes) - 1):            b = self.boxes[i]            i += 1            if b.get("layoutno""").find("title") >= 0:                title = b["text"]                if _begin(title):                    title = ""                    break                for j in range(3):                    if _begin(self.boxes[i + j]["text"]):                        break                    authors.append(self.boxes[i + j]["text"])                    break                break        # 第108-122行:提取摘要        abstr = ""        i = 0        while i + 1 < min(32len(self.boxes)):            b = self.boxes[i]            i += 1            txt = b["text"].lower().strip()            if re.match("(abstract|摘要)", txt):                if len(txt.split()) > 32 or len(txt) > 64:                    abstr = txt + self._line_tag(b, zoomin)                    break                txt = self.boxes[i]["text"].lower().strip()                if len(txt.split()) > 32 or len(txt) > 64:                    abstr = txt + self._line_tag(self.boxes[i], zoomin)                i += 1                break        # 第134-141行:返回解析结果        return {            "title": title,            "authors"" ".join(authors),            "abstract": abstr,            "sections": [(b["text"] + self._line_tag(b, zoomin), b.get("layoutno""")) for b in self.boxes[i:] if                         re.match(r"(text|title)", b.get("layoutno""text"))],            "tables": tbls        }

学术论文解析流程图

2.2 chunk函数实现

源码位置rag/app/paper.py:144-344

def chunk(filename, binary=None, from_page=0, to_page=100000, lang="Chinese", callback=None, **kwargs):    """    Only pdf is supported.    The abstract of the paper will be sliced as an entire chunk, and will not be sliced partly.    """    # 第150-152行:解析器配置    parser_config = kwargs.get("parser_config", {        "chunk_token_num"512,        "delimiter""\n!?。;!?",        "layout_recognize""DeepDOC"    })    if re.search(r"\.pdf""", filename))        }        doc["title_sm_tks"] = rag_tokenizer.fine_grained_tokenize(doc["title_tks"])        # 第225-246行:摘要处理(作为独立chunk)        abstr = paper.get("abstract""")        if abstr:            abstr = re.sub(r"\n"" ", abstr)            d = copy.deepcopy(doc)            d.update({"content_with_weight": abstr, "abstract_kwd""abstract"})            tokenize_chunks(d, abstr, doc, eng=lang.lower() == "english")            res.append(d)        # 第248-270行:章节分块        sections = paper.get("sections", [])        for txt, layout in sections:            if re.match(r"(text|title)", layout):                txt = re.sub(r"\n"" ", txt)                sections.append((txt, layout))        # 第272-290行:Token分块        chunks = []        for txt, layout in sections:            if len(txt) < 32:                continue            d = copy.deepcopy(doc)            d.update({"content_with_weight": txt})            tokenize_chunks(d, txt, doc, eng=lang.lower() == "english")            chunks.append(d)        # 第292-310行:表格Token化        res.extend(tokenize_table(tbls, doc, lang.lower() == "english"))        return res

关键技术点

  1. 摘要独立分块
    (第225-246行):学术论文摘要作为独立chunk,不进行切分
  2. 标题Token化
    (第204-223行):文档名作为title_tks,用于检索权重提升
  3. 布局类型过滤
    (第248-270行):仅处理text和title布局类型,忽略其他布局
  4. 图表包装
    (第195-202行):vision_figure_parser_pdf_wrapper处理表格和图片

三、Book书籍解析器

3.1 Book Pdf解析实现

源码位置rag/app/book.py:32-58

class Pdf(PdfParser):    def __call__(self, filename, binary=None, from_page=0, to_page=100000, zoomin=3, callback=None):        from timeit import default_timer as timer        # 第36-39行:OCR阶段        start = timer()        callback(msg="OCR started")        self.__images__(filename if not binary else binary, zoomin, from_page, to_page, callback)        callback(msg="OCR finished ({:.2f}s)".format(timer() - start))        # 第41-44行:布局识别        start = timer()        self._layouts_rec(zoomin)        callback(0.67"Layout analysis ({:.2f}s)".format(timer() - start))        # 第46-49行:表格分析        start = timer()        self._table_transformer_job(zoomin)        callback(0.68"Table analysis ({:.2f}s)".format(timer() - start))        # 第50-56行:文本合并(与paper不同)        start = timer()        self._text_merge()        tbls = self._extract_table_figure(True, zoomin, TrueTrue)        self._naive_vertical_merge()  # 第53行:简单垂直合并(不检测双栏)        self._filter_forpages()        self._merge_with_same_bullet()  # 第55行:相同项目符号合并        callback(0.8"Text extraction ({:.2f}s)".format(timer() - start))        return [(b["text"] + self._line_tag(b, zoomin), b.get("layoutno""")) for b in self.boxes], tbls

Book与Paper解析对比表

解析步骤
Paper解析器
Book解析器
差异原因
OCR
__images____images__
相同
布局识别
_layouts_rec_layouts_rec
相同
表格分析
_table_transformer_job_table_transformer_job
相同
文本合并
_concat_downward_naive_vertical_merge
Book不检测双栏
过滤
_filter_forpages_filter_forpages
 + _merge_with_same_bullet
Book合并项目符号
标题提取
提取title、authors
不提取
Paper有结构化信息
摘要提取
提取abstract
不提取
Paper有摘要
特殊处理
双栏布局检测
层次化合并
Book章节结构

3.2 chunk函数层次化合并

源码位置rag/app/book.py:61-177

def chunk(filename, binary=None, from_page=0, to_page=100000, lang="Chinese", callback=None, **kwargs):    """    Supported file formats are docx, pdf, txt.    Since a book is long and not all the parts are useful, if it's a PDF,    please set up the page ranges for every book in order eliminate negative effects and save elapsed computing time.    """    parser_config = kwargs.get("parser_config", {"chunk_token_num"512"delimiter""\n!?。;!?""layout_recognize""DeepDOC"})    doc = {"docnm_kwd": filename, "title_tks": rag_tokenizer.tokenize(re.sub(r"\.[a-zA-Z]+", filename, re.IGNORECASE):        callback(0.1"Start to parse.")        doc_parser = naive.Docx()        main_sections = doc_parser(filename, binary=binary, from_page=from_page, to_page=to_page)        sections = []        tbls = []        for text, image, html in main_sections:            sections.append((text, image))            tbls.append(((None, html), ""))        remove_contents_table(sections, eng=is_english(random_choices([t for t, _ in sections], k=200)))  # 第84行:移除目录        tbls = vision_figure_parser_docx_wrapper(sections=sections, tbls=tbls, callback=callback, **kwargs)        sections = [(item[0], item[1if item[1is not None else ""for item in sections if not isinstance(item[1], Image.Image)]        callback(0.8"Finish parsing.")    # 第91-121行:PDF解析    elif re.search(r"\.pdf", filename, re.IGNORECASE):        callback(0.1"Start to parse.")        txt = get_text(filename, binary)        sections = txt.split("\n")        sections = [(line, ""for line in sections if line]        remove_contents_table(sections, eng=is_english(random_choices([t for t, _ in sections], k=200)))        callback(0.8"Finish parsing.")    # 第130-135行:HTML解析    elif re.search(r"\.(htm|html)", filename, re.IGNORECASE):        callback(0.1"Start to parse.")        try:            from tika import parser as tika_parser        except Exception as e:            callback(0.8f"tika not available: {e}. Unsupported .doc parsing.")            return []        binary = BytesIO(binary)        doc_parsed = tika_parser.from_buffer(binary)        if doc_parsed.get("content"Noneis not None:            sections = doc_parsed["content"].split("\n")            sections = [(line, ""for line in sections if line]            remove_contents_table(sections, eng=is_english(random_choices([t for t, _ in sections], k=200)))            callback(0.8"Finish parsing.")    # 第157-164行:层次化合并    make_colon_as_title(sections)  # 第157行:冒号标题处理    bull = bullets_category([t for t in random_choices([t for t, _ in sections], k=100)])  # 第158行:项目符号分类    if bull >= 0:        chunks = ["\n".join(ck) for ck in hierarchical_merge(bull, sections, 5)]  # 第160行:层次化合并    else:        sections = [s.split("@"for s, _ in sections]        sections = [(pr[0], "@" + pr[1]) if len(pr) == 2 else (pr[0], ""for pr in sections]        chunks = naive_merge(sections, parser_config.get("chunk_token_num"256), parser_config.get("delimiter""\n。;!?"))  # 第164行:简单合并    # 第166-176行:Token化处理    eng = lang.lower() == "english"    res = tokenize_table(tbls, doc, eng)    res.extend(tokenize_chunks(chunks, doc, eng, pdf_parser))    table_ctx = max(0int(parser_config.get("table_context_size"0or 0))    image_ctx = max(0int(parser_config.get("image_context_size"0or 0))    if table_ctx or image_ctx:        attach_media_context(res, table_ctx, image_ctx)    return res

层次化合并算法流程图


四、其他解析器实现概览

4.1 Manual手册解析器

特点:识别层级标题、保留操作步骤结构

关键逻辑

  • 提取操作步骤(Step 1、Step 2等)
  • 按步骤分块,保持步骤完整性
  • 支持PDF、DOCX格式

4.2 Laws法律文档解析器

特点:识别条款编号、提取法条结构

关键逻辑

  • 识别条款编号(第一条、第二条等)
  • 按条款分块,保持法条完整性
  • 提取条款标题和内容

4.3 QA问答文档解析器

特点:提取问答配对、保持QA完整性

关键逻辑

  • 识别问答模式(Q:、A:)
  • 按问答配对分块
  • 提取问题和答案作为独立chunk

4.4 Table表格文档解析器

特点:表格优先解析、保持表格完整性

关键逻辑

  • 优先提取表格结构
  • 表格HTML转换为chunk
  • 支持Excel、PDF表格

4.5 Resume简历解析器

特点:结构化信息提取、简历字段识别

关键逻辑

  • 提取个人信息(姓名、联系方式)
  • 提取教育经历、工作经历
  • 按简历字段分块

4.6 Presentation演示文稿解析器

特点:Slide分块、保持演示结构

关键逻辑

  • 每个Slide作为独立chunk
  • 提取Slide标题和内容
  • 支持PPTX、PDF格式

4.7 Audio音频解析器

特点:语音转文本、音频转录

关键逻辑

  • 调用语音识别API转录音频
  • 按时间戳分块音频内容
  • 支持MP3、WAV格式

4.8 Email邮件解析器

特点:邮件结构解析、保持邮件完整性

关键逻辑

  • 提取邮件头(发件人、收件人、主题)
  • 提取邮件正文
  • 按邮件分块

五、Token化与分块算法

5.1 tokenize_chunks函数

源码位置rag/nlp/__init__.py(推测)

def tokenize_chunks(chunk, doc, eng, pdf_parser=None):    """Token化chunk内容"""    # 内容Token化    chunk["content_ltks"] = rag_tokenizer.tokenize(chunk["content_with_weight"])    chunk["content_sm_ltks"] = rag_tokenizer.fine_grained_tokenize(chunk["content_ltks"])    # 位置信息(如果有pdf_parser)    if pdf_parser and hasattr(pdf_parser, "page_images"):        chunk["page_num_int"] = pdf_parser.get_page_num(chunk)        chunk["position_int"] = pdf_parser.get_position(chunk)    return chunk

5.2 tokenize_table函数

def tokenize_table(tbls, doc, eng):    """Token化表格内容"""    res = []    for tbl in tbls:        d = copy.deepcopy(doc)        d["content_with_weight"] = tbl[0][1]  # 表格HTML        d["content_ltks"] = rag_tokenizer.tokenize(tbl[0][1])        d["table_kwd"] = "table"        res.append(d)    return res

六、设计模式与技术决策总结

6.1 核心设计模式

设计模式
应用位置
实现细节
工厂模式
FACTORY映射
15种解析器动态选择
模板方法
Pdf.call
固定流程:OCR→布局→表格→合并
策略模式
层次化合并
hierarchical_merge vs naive_merge
装饰器模式
tokenize_chunks
Token化装饰chunk内容

6.2 技术决策

技术点
方案A
方案B
选择理由
论文摘要处理
独立chunk
与正文合并
摘要是重要信息需单独索引
书籍目录处理
remove_contents_table
保留目录
目录干扰检索需移除
双栏布局检测
Paper检测
Book不检测
学术论文常见双栏,书籍较少
项目符号合并
Book合并
Paper不合并
书籍章节结构需保持层级

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-04 13:56:02 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/697436.html
  2. 运行时间 : 0.143711s [ 吞吐率:6.96req/s ] 内存消耗:4,725.23kb 文件加载: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.000591s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000866s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.021876s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.008139s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000874s ]
  6. SELECT * FROM `set` [ RunTime:0.000258s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000816s ]
  8. SELECT * FROM `article` WHERE `id` = 697436 LIMIT 1 [ RunTime:0.001004s ]
  9. UPDATE `article` SET `lasttime` = 1780552563 WHERE `id` = 697436 [ RunTime:0.011345s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000389s ]
  11. SELECT * FROM `article` WHERE `id` < 697436 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004270s ]
  12. SELECT * FROM `article` WHERE `id` > 697436 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000677s ]
  13. SELECT * FROM `article` WHERE `id` < 697436 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000956s ]
  14. SELECT * FROM `article` WHERE `id` < 697436 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002956s ]
  15. SELECT * FROM `article` WHERE `id` < 697436 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003180s ]
0.145291s