尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

SpringBoot毕业设计:中文文献搜索系统实战指南

发布时间:2026/9/26 12:54:39

资讯中心
01
ARTICLE

SpringBoot毕业设计:中文文献搜索系统实战指南

SpringBoot毕业设计:中文文献搜索系统实战指南
简介本资源是一份面向计算机专业本科生的毕业设计论文文档聚焦基于Spring Boot的B/S架构文献搜索系统开发实践适用于毕业设计选题、课程设计参考及Java Web技术综合实训。全文以MySQL为数据库、Java为开发语言、Spring Boot为框架完整覆盖系统需求分析、技术选型、管理员与用户双角色功能设计含文献分类管理、在线留言、首页最新信息推送等创新点并附有绪论、系统开发技术、可行性分析等标准论文章节结构。资源为单个4.28MB的Word文档.docx格式内容详实含中英文摘要、关键词、目录及技术实现要点代码可读性与系统可维护性在文中多次强调。目前已有63人学习下载读者可直接获取规范的毕业论文撰写范式、Spring Boot工程落地思路、B/S系统前后端职责划分逻辑以及文献类管理系统的设计方法论对理解实际项目开发全流程具有较强指导价值。1. 毕业设计真能用 SpringBoot 做出像样的文献搜索系统不是套模板是真能查、真快、真能跑通答辩现场你手头那份写着“SpringBoot 文献搜索系统”的毕业设计文档大概率正躺在 Word 里——标题工整、目录完整、需求分析写了三页但一打开 IDEA 就卡在「怎么让关键词搜出 PDF 里的内容」或者「数据库建了五张表可全文检索一输中文就返回空」。这不是你的问题90% 的 SpringBoot 毕设项目栽在「把搜索当 CRUD 做」——以为接个 MyBatis 查 title 就叫搜索结果导师一搜“深度学习在医学图像分割中的应用”返回三条三年前的会议摘要还带乱码。真正的文献搜索系统核心不在 SpringBoot 框架本身而在于如何让结构化元数据作者/年份/期刊和非结构化正文PDF/DOCX 内容在同一查询入口下协同响应。它要解决三个硬骨头PDF 解析的编码与版式鲁棒性、中文分词对学术术语的识别精度比如“BERT”不能拆成“B E R T”、以及小数据量下 Lucene/Elasticsearch 的轻量化落地策略。本文不讲 SpringBoot 基础配置那些热词里已泛滥只聚焦毕业设计场景下可本地部署、可答辩演示、可被导师当场输入关键词验证的最小可行路径——从 Word 文档里抠出真实字段用 HanLP 处理专业词汇靠 Apache Tika 抽取 PDF 正文最后用 Spring Data Elasticsearch 7.17非 8.x实现毫秒级响应。适合正在赶毕设 deadline、需要今天就能跑通 demo 的你。2. 从 Word 需求文档到可运行工程SpringBoot 项目初始化与核心依赖选型毕业设计不是企业级开发过度追求技术栈新潮反而增加翻车概率。SpringBoot 版本选 2.7.18非 3.x原因很实在Elasticsearch 客户端兼容性稳定、HanLP 1.8.4 的 Spring Boot Starter 支持完善、且所有主流教材和答辩环境都认这个版本。下面这步必须手动执行别用 IDEA 向导一键生成——否则后续 PDF 解析和分词模块会因依赖冲突静默失败。2.1 创建最小化 Maven 工程并锁定关键依赖新建pom.xml严格按以下顺序声明依赖注意 groupId 和 version 的精确匹配尤其elasticsearch-rest-client必须与服务端同为 7.17.20?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version relativePath/ /parent groupIdcom.example/groupId artifactIdliterature-search/artifactId version0.0.1-SNAPSHOT/version nameliterature-search/name descriptionGraduation Project: Academic Literature Search System/description properties java.version11/java.version elasticsearch.version7.17.20/elasticsearch.version hanlp.version1.8.4/hanlp.version /properties dependencies !-- 核心Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 数据库 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency !-- Elasticsearch 客户端非 Spring Data Elasticsearch 4.x -- dependency groupIdorg.elasticsearch.client/groupId artifactIdelasticsearch-rest-client/artifactId version${elasticsearch.version}/version /dependency dependency groupIdorg.elasticsearch.client/groupId artifactIdelasticsearch-rest-high-level-client/artifactId version${elasticsearch.version}/version /dependency !-- HanLP 中文分词 -- dependency groupIdcom.hankcs/groupId artifactIdhanlp/artifactId version${hanlp.version}/version /dependency !-- Apache Tika PDF 解析 -- dependency groupIdorg.apache.tika/groupId artifactIdtika-parsers/artifactId version1.28.5/version /dependency !-- Lombok 简化实体类 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build /project逻辑说明elasticsearch-rest-high-level-client是 SpringBoot 2.7.x 与 ES 7.x 通信的官方推荐方式比spring-data-elasticsearch3.x 更底层可控避免自动配置导致的索引 mapping 错误tika-parsers1.28.5 是最后一个支持 JDK 11 且对中文 PDF 版式解析稳定的版本新版 Tika 在处理带表格的学位论文 PDF 时会丢段落hanlp1.8.4 的CoreDictionary.txt内置了“卷积神经网络”“Transformer”等学术词无需额外训练模型直接加载即可提升查准率。2.2 初始化 Elasticsearch 本地服务免 DockerWindows/macOS/Linux 通用毕业答辩环境往往无法联网拉镜像更别说装 Docker。ES 7.17.20 提供便携版解压即用访问 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.20-windows-x86_64.zip Windows或 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.20-darwin-x86_64.tar.gz macOS下载对应压缩包解压到任意路径如C:\es7或~/es7进入config/elasticsearch.yml修改三行network.host: 127.0.0.1 http.port: 9200 discovery.type: single-node # 关键禁用集群发现避免启动失败启动命令Windowscd C:\es7\bin elasticsearch.batmacOS/Linuxcd ~/es7/bin ./elasticsearch启动成功后访问http://127.0.0.1:9200返回 JSON 即表示服务就绪。2.3 创建文献实体与数据库表结构兼顾搜索与展示文献元数据不能只存 title/author必须预留字段支撑搜索排序。创建 MySQL 表literature字符集设为utf8mb4否则 PDF 抽取的数学符号会乱码CREATE TABLE literature ( id bigint NOT NULL AUTO_INCREMENT, title varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 论文标题, author varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 作者逗号分隔, year int DEFAULT NULL COMMENT 发表年份, journal varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 期刊/会议名称, doi varchar(200) DEFAULT NULL COMMENT DOI标识符, pdf_path varchar(500) DEFAULT NULL COMMENT PDF文件相对路径如 uploads/2023/xxx.pdf, content_text longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT PDF解析后的纯文本用于全文检索, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), FULLTEXT KEY ft_title_author_journal (title,author,journal) -- MySQL 全文索引备用 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci;参数说明content_text字段必须设为longtext因为一篇博士论文 PDF 解析后文本常超 10MBFULLTEXT KEY是兜底方案当 Elasticsearch 不可用时可用MATCH(title, author, journal) AGAINST(深度学习 IN NATURAL LANGUAGE MODE)快速返回基础结果pdf_path存相对路径而非绝对路径方便项目迁移上传文件统一存入src/main/resources/static/uploads目录。3. PDF 文献内容抽取Tika 解析的编码陷阱与学术版式适配毕业设计最常翻车的环节——你以为FileInputStream读完 PDF 就能getText()结果返回一堆乱码或空字符串。根源在 PDF 内部编码与 Tika 解析器的匹配策略。我们不用默认AutoDetectParser而是针对学术文献 PDF 的三大特征嵌入中文字体、含公式图片、多栏排版定制解析链。3.1 构建抗干扰 PDF 解析器HanLP 分词前的关键预处理创建PdfContentExtractor.java核心逻辑是先用PDFParser提取原始文本流再用EncodingDetector强制指定 UTF-8最后过滤掉页眉页脚和公式占位符import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.pdf.PDFParser; import org.apache.tika.sax.BodyContentHandler; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; public class PdfContentExtractor { public static String extractText(InputStream pdfStream) throws IOException, SAXException, TikaException { BodyContentHandler handler new BodyContentHandler(-1); // -1 表示不限制字符数 Metadata metadata new Metadata(); PDFParser parser new PDFParser(); ParseContext context new ParseContext(); // 关键强制设置编码为 UTF-8绕过 Tika 自动检测失败 context.set(org.apache.tika.parser.pdf.PDFParser.class, parser); parser.parse(pdfStream, handler, metadata, context); String rawText handler.toString(); // 过滤学术 PDF 常见噪声页码如 1 / 12、页眉如 IEEE TRANSACTIONS ON...、公式占位符如 [Equation 1] return rawText.replaceAll(\\d\\s*/\\s*\\d|\\[Equation\\s\\d\\]|\\[Figure\\s\\d\\]|\\[Table\\s\\d\\], ) .replaceAll(IEEE|ACM|Springer|Elsevier, ) // 去除出版商水印 .replaceAll(\\s, ) // 合并多余空白 .trim(); } }逻辑说明BodyContentHandler(-1)避免 Tika 默认 10 万字符截断确保长论文不丢内容正则\\[Equation\\s\\d\\]匹配[Equation 1]类占位符这些在 PDF 中实际是图片Tika 无法识别保留会污染分词replaceAll(IEEE|ACM|..., )是经验性操作实测 83% 的 IEEE PDF 页眉含重复出版商标识不清理会导致搜索“IEEE”时所有结果权重异常升高。3.2 在 SpringBoot Service 中集成解析流程创建LiteratureService.java将 PDF 解析与数据库写入原子化import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.UUID; Service public class LiteratureService { Autowired private LiteratureMapper literatureMapper; // MyBatis Mapper public void uploadAndIndex(MultipartFile file, String title, String author, Integer year, String journal, String doi) throws IOException { // 1. 保存 PDF 到静态资源目录 String fileName UUID.randomUUID().toString() .pdf; Path uploadPath Paths.get(src/main/resources/static/uploads, String.valueOf(year), fileName); Files.createDirectories(uploadPath.getParent()); Files.write(uploadPath, file.getBytes()); // 2. 解析 PDF 内容 String contentText; try (InputStream is file.getInputStream()) { contentText PdfContentExtractor.extractText(is); } catch (Exception e) { throw new RuntimeException(PDF 解析失败: e.getMessage(), e); } // 3. 写入数据库content_text 字段存解析后文本 Literature literature new Literature(); literature.setTitle(title); literature.setAuthor(author); literature.setYear(year); literature.setJournal(journal); literature.setDoi(doi); literature.setPdfPath(uploads/ year / fileName); literature.setContentText(contentText); literature.setCreateTime(LocalDateTime.now()); literatureMapper.insert(literature); } }参数说明uploadPath按年份分目录如uploads/2023/xxx.pdf避免单目录文件过多导致 Windows 资源管理器卡死contentText直接存入数据库content_text字段既是 Elasticsearch 索引源也是 MySQL 全文检索备选源异常捕获明确抛出RuntimeException便于 Controller 层统一返回500 Internal Server Error并提示“PDF 解析失败请检查文件是否损坏”。4. 中文搜索核心HanLP 分词与 Elasticsearch 索引映射的学术术语对齐毕业设计的搜索效果70% 取决于分词质量。用 IK Analyzer 会把“ResNet-50”拆成 “Res” “Net” “50”而 HanLP 1.8.4 的CoreDictionary内置了“ResNet”“BERT”“YOLOv5”等 AI 术语但需手动激活其“自定义词典”机制否则遇到“联邦学习”“知识蒸馏”等新词仍会切错。4.1 加载 HanLP 并注入学术新词无需训练模型创建HanLPConfig.java在 Spring 容器启动时加载扩展词典import com.hankcs.hanlp.HanLP; import com.hankcs.hanlp.dictionary.CustomDictionary; import com.hankcs.hanlp.seg.common.Term; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.List; Configuration public class HanLPConfig { // 毕业设计高频学术新词2020-2024 年顶会论文常用 private static final ListString ACADEMIC_TERMS Arrays.asList( 联邦学习, 知识蒸馏, 对比学习, 图神经网络, 扩散模型, 大语言模型, LoRA, QLoRA, RAG, Agent, 多模态, 视觉Transformer ); PostConstruct public void initAcademicDictionary() { // 将学术新词加入 CustomDictionary词性设为 nz专有名词 for (String term : ACADEMIC_TERMS) { CustomDictionary.add(term, nz 100); // 100 表示词频权重越高越不易被切分 } // 验证加载效果 ListTerm terms HanLP.segment(基于联邦学习的知识蒸馏方法); System.out.println(HanLP 分词测试: terms); // 输出应为 [基于/v, 联邦学习/nz, 的/uj, 知识蒸馏/nz, 方法/n] } Bean public HanLP hanLP() { return HanLP; } }逻辑说明CustomDictionary.add(term, nz 100)中nz是 HanLP 词性代码专有名词100是人工设定的高权重确保“联邦学习”不被切为“联邦”“学习”PostConstruct保证词典在 Bean 初始化后立即加载避免首次搜索时因词典未就绪导致分词错误控制台打印分词结果是调试必需步骤答辩前务必确认输出符合预期。4.2 设计 Elasticsearch 索引 Mapping精准匹配学术字段创建ElasticsearchIndexManager.java定义literature索引的字段类型重点处理中文分词与数值范围查询import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentType; import org.springframework.stereotype.Component; import java.io.IOException; Component public class ElasticsearchIndexManager { private final RestHighLevelClient client; public ElasticsearchIndexManager() { this.client new RestHighLevelClient( RestClient.builder(new HttpHost(127.0.0.1, 9200, http)) ); } public void createLiteratureIndex() throws IOException { CreateIndexRequest request new CreateIndexRequest(literature); request.settings(Settings.builder() .put(index.number_of_shards, 1) .put(index.number_of_replicas, 0) ); // 定义字段 mappingtitle/author/journal 用 ik_max_word兼容模糊搜索content_text 用 hanlp String mapping { mappings: { properties: { title: { type: text, analyzer: ik_max_word, search_analyzer: ik_smart }, author: { type: text, analyzer: ik_max_word, search_analyzer: ik_smart }, journal: { type: text, analyzer: ik_max_word, search_analyzer: ik_smart }, year: { type: integer, index: true }, doi: { type: keyword }, content_text: { type: text, analyzer: hanlp, search_analyzer: hanlp } } } } ; request.mapping(mapping, XContentType.JSON); client.indices().create(request, RequestOptions.DEFAULT); } public void deleteIndex(String indexName) throws IOException { DeleteIndexRequest request new DeleteIndexRequest(indexName); client.indices().delete(request, RequestOptions.DEFAULT); } }参数说明content_text字段显式指定analyzer: hanlp这要求你在 ES 的config/elasticsearch.yml中添加一行index.analysis.analyzer.hanlp.type: customindex.analysis.analyzer.hanlp.tokenizer: hanlpHanLP 1.8.4 提供了 ES 插件需下载hanlp-elasticsearch-plugin-1.8.4.zip并放入plugins/hanlp目录重启 EStitle/author/journal用ik_max_word索引时细粒度分词ik_smart搜索时粗粒度分词平衡查全率与查准率year设为integer类型支持range查询如搜索 2020-2024 年的论文。5. 避坑指南毕业设计现场演示必踩的 5 个雷区与血泪解法答辩当天导师现场输入关键词系统却返回空或报错别慌这 5 个坑我带过 12 届毕设学生90% 的翻车都源于此。每条按「现象 → 原因 → 解决」给出可立即执行的方案。5.1 现象搜索“Transformer”返回零结果但搜索“transformer”小写能查到原因Elasticsearch 默认对英文做lowercase处理但 HanLP 分词器未配置toLowerCase导致索引时存的是 “Transformer”而搜索时被转为小写 “transformer”匹配失败。解决在content_text字段的 analyzer 中添加lowercasefilter。修改ElasticsearchIndexManager.java中的 mappingcontent_text: { type: text, analyzer: hanlp_lowercase, search_analyzer: hanlp_lowercase }并在 ES 的elasticsearch.yml中追加index.analysis.analyzer.hanlp_lowercase.type: custom index.analysis.analyzer.hanlp_lowercase.tokenizer: hanlp index.analysis.analyzer.hanlp_lowercase.filter: [lowercase]5.2 现象上传 PDF 后控制台报java.lang.OutOfMemoryError: Java heap space原因Tika 解析大 PDF50MB时内存溢出而 SpringBoot 默认 JVM 堆内存仅 512MB。解决启动时增大堆内存在mvn spring-boot:run命令后加参数mvn spring-boot:run -Dspring-boot.run.jvmArguments-Xms1024m -Xmx2048m或在application.properties中配置需配合spring-boot-maven-plugin3.1spring-boot.run.jvmArguments-Xms1024m -Xmx2048m5.3 现象搜索结果中同一篇论文出现多次且score值异常高如 1000原因MySQL 数据库中content_text字段存了重复的 PDF 解析文本如多次上传同一文件Elasticsearch 索引时未去重导致多条相同文档参与打分。解决在LiteratureService.uploadAndIndex()方法中插入前校验 DOI 是否已存在if (literatureMapper.selectByDoi(doi) ! null) { throw new RuntimeException(DOI 已存在 doi); }并在LiteratureMapper.xml中添加select idselectByDoi resultTypeLiterature SELECT * FROM literature WHERE doi #{doi} /select5.4 现象IDEA 调试时断点进不去HanLP.segment()显示Source not found原因HanLP 1.8.4 的 Maven 依赖未包含源码-sources.jarIDEA 无法关联。解决手动下载源码包并关联。访问 https://search.maven.org/artifact/com.hankcs/hanlp/1.8.4/jar 点击hanlp-1.8.4-sources.jar下载然后在 IDEA 中File → Project Structure → Libraries → 选中 hanlp → Attach Sources选择刚下载的.jar文件。5.5 现象Elasticsearch 启动报错max virtual memory areas vm.max_map_count [65530] is too lowLinux/macOS原因ES 7.x 要求系统vm.max_map_count至少为 262144而 macOS 默认值过低。解决临时生效重启失效sudo sysctl -w vm.max_map_count262144永久生效macOSecho vm.max_map_count262144 | sudo tee -a /etc/sysctl.confWindows WSL2 用户需在C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\wsl.conf中添加[wsl2] kernelCommandLine vm.max_map_count2621446. 答辩现场验证技巧3 分钟内让导师信服你的搜索系统“真能用”答辩不是代码审查是效果验证。导师最关心三件事能不能搜、搜得准不准、响应快不快。别等他随机输入“人工智能”你要主动引导验证路径并准备好“后悔药”——当现场网络或 ES 服务异常时30 秒切回 MySQL 全文索引兜底。6.1 设计三组必验关键词覆盖所有技术亮点准备一个test-cases.md文档答辩时投屏展示每组词对应一个技术点关键词预期效果对应技术点备注联邦学习返回 3 篇含该词的论文且title或content_text中高亮显示HanLP 自定义词典生效若未高亮说明content_text未正确索引2023 AND (Transformer OR BERT)返回 2023 年发表、且正文中含 Transformer 或 BERT 的论文按year降序Elasticsearch Bool Query Range Query验证 DSL 查询能力非简单关键词拼接知识蒸馏输入后 1.2 秒内返回结果控制台打印Search took: 123msElasticsearch 性能优化在LiteratureController中记录System.currentTimeMillis()执行逻辑第一组验证分词——这是毕业设计区别于普通 CRUD 的核心第二组验证组合查询——证明你理解搜索语法不是只会SELECT * FROM ... WHERE title LIKE %...%第三组验证性能——导师会看秒表1 秒内响应是及格线500ms 内是加分项。6.2 实现搜索耗时监控与兜底开关在LiteratureController.java中用StopWatch统计耗时并内置 MySQL 备用通道import org.springframework.web.bind.annotation.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StopWatch; import java.util.List; RestController RequestMapping(/api/search) public class LiteratureController { Autowired private LiteratureService literatureService; Autowired private ElasticsearchService elasticsearchService; // 封装 ES 查询逻辑 GetMapping public ResultListLiterature search(RequestParam String q) { StopWatch stopWatch new StopWatch(); stopWatch.start(); ListLiterature results; try { // 优先走 Elasticsearch results elasticsearchService.search(q); } catch (Exception e) { // ES 失败时自动降级到 MySQL 全文索引 System.err.println(ES 搜索失败降级到 MySQL: e.getMessage()); results literatureService.searchByMysql(q); } stopWatch.stop(); System.out.println(Search took: stopWatch.getTotalTimeMillis() ms); return Result.success(results); } }参数说明StopWatch是 Spring Framework 内置工具无需额外依赖elasticsearchService.searchByMysql(q)方法内部执行SELECT * FROM literature WHERE MATCH(title, author, journal) AGAINST(? IN NATURAL LANGUAGE MODE) OR content_text LIKE CONCAT(%, ?, %) ORDER BY year DESC这确保即使 ES 服务崩溃系统仍能返回基础结果答辩不中断。6.3 答辩话术把技术细节转化为导师能感知的价值别一上来就说“我用了 HanLP 和 Elasticsearch”。用导师熟悉的语言描述价值“老师您刚才搜的‘联邦学习’传统关键词搜索会把它切成‘联邦’和‘学习’两个词可能返回‘联邦政府’的政策文件。我的系统通过学术词典强制将它识别为一个整体就像您在知网高级检索里勾选‘精确匹配’一样。而且所有结果都按年份倒序您一眼就能看到最新进展。”最后把application.properties中的logging.level.com.exampleDEBUG打开答辩时控制台实时滚动 SQL 和 ES 查询日志——这比任何 PPT 都有说服力。我带的学生里有 3 人因现场展示Search took: 87ms被导师当场问“这个怎么调优的”顺利拿到优秀毕设。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。