基于正倒排索引的文档搜索引擎测试报告

一、项目背景

该项目是一款针对JDK 8的API文档搜索引擎,聚焦于解决官方网站未对JDK 8提供搜索功能带来的不便,为用户带来轻量化、快速、便捷的搜索体验。使用该搜索引擎,可以快速定位符合用户预期的文档列表供用户选择。

项目的核心功能搜索功能实现:

  • **搜索词处理:**实现这一功能对用户搜索需求的精准判断是关键。为了从搜索词中提取出合适的关键词,项目使用了第三方分词库ansj来对搜索词进行分词,精准定位用户需求。

  • **倒排索引定位:**倒排索引根据 '关键词' 查找 '文档ID' ,以关键词为主体,记录每个词出现在哪些文档、词频,建立hash表。提取出关键词后,根据倒排索引可以查询到各个关键词都在那些文档中出现过,出现过几次。这些查询出的【文档ID+词频】汇总起来,再依据词频进行排序就是所有可能的目标文档列表。

  • **正排索引检索:**正排索引根据 '文档ID' 查找 '文档内容'。根据倒排索引的定位结果,按顺序根据文档ID查找文档内容,汇总起来就是我们需要的搜索结果列表(未处理、已权重排序)。 倒排索引能够快速根据关键词查找到文档ID,而正排索引更适合遍历文档,查询关键词很慢。两者的配合+索引持久化保障了搜索引擎搜索效率。

  • **索引持久化:**建立索引需要对所有文档进行扫描,这一过程是极慢的,尤其是倒排索引(需要记录每个文档的所有关键词和词频)。好在JDK 8的文档是固定的,无需面对文档修改后重新更新索引的问题。只需提前扫描并建立索引,通过序列化和反序列化的方式,储存和提取索引即可。

  • **搜索结果优化:**主要优化方向有两个"权重算法优化"和"核心词高亮"。

    • 权重算法优化:由单纯的词频总数,转换为不同位置出现具有不同的加权,如标题中出现会给其更高的权重(*10)

    • 核心词高亮:查找并替换搜索结果的文本,为核心词加上html格式,前端再通过保留文本html格式+css渲染实现高亮。

为带给用户更好的体验,在项目设计上,参考了市面上的主流搜索引擎,如"百度"、"搜狗"等。从这些搜索引擎上,提取了非常有用且易于实现的几个功能。首先是"标题+简介+url"结构的搜索结果,能够帮助用户更好判断网页是否是自己要找的;其次是"核心词标红",针对用户搜索词,会在搜索结果上对这些搜索词进行高亮处理。最后是搜索权重优先级设置,发现出现更多搜索词的搜索结果更容易出现在前列。

吸收了这些优点后,再添加一些小巧思功能(前端实现:回车快捷搜索,上下键焦点定位翻阅,回车配合焦点定位打开搜索结果),就完成了这个简约但不简单的搜索引擎。

二、测试范围

2.1 功能测试

**搜索功能:**用户输入搜索词,点击搜索按键或按回车键开始搜索。后端根据搜索词返回搜索结果。

**搜索结果展示功能:**搜索结果根据权重倒序排列,关键词会进行高亮处理,用户点击搜索结果可以跳转到对应的文档页面。

**快捷键操作功能:**用户全程使用键盘来完成搜索,使用/键聚焦搜索框,使用键盘输入搜索词,使用回车键进行搜索,使用 ↑ ↓ 控制选择文档,使用回车键打开选择的文档页面。

三、测试用例设计

四、测试流程

4.1 功能测试

  • 环境:win 11,chrome浏览器最新版

  • 执行方式:手工测试+自动化测试

4.1.1 实际执行部分测试用例的操作步骤/截图

(1)搜索功能

搜索词测试用例:

|--------|------|---------------------------------|------------------------|---------------|
| 测试用例序号 | 所属模块 | 测试目标 | 输入数据 | 预期结果 |
| 1 | 搜索模块 | 测试纯英文搜索词能否搜索成功,点击搜索方式 | 搜索词: arraylist | 搜索成功 |
| 2 | 搜索模块 | 测试带空格的英文搜索词能否搜索成功,点击搜索方式 | 搜索词: array list | 搜索成功 |
| 3 | 搜索模块 | 测试纯空格搜索词能否搜索成功,点击搜索方式 | 搜索词: 空格 | 未通过校验,不进行搜索 |
| 4 | 搜索模块 | 测试中文搜索词能否搜索成功,点击搜索方式 | 搜索词: 你好 | 搜索成功,搜不到内容 |
| 5 | 搜索模块 | 测试中英文混合搜索词能否搜索成功,点击搜索方式 | 搜索词: hello 世界 | 搜索成功 |
| 6 | 搜索模块 | 测试无实际意义单词搜索词能否搜索成功,回车搜索方式 | 搜索词: abcq wyp | 搜索成功 无搜索结果 |
| 7 | 搜索模块 | 测试纯停用词搜索词能否搜索成功,回车搜索方式 | 搜索词: an or the | 搜索成功 无搜索结果 |
| 8 | 搜索模块 | 测试包含停用词的搜索词能否搜索成功,回车搜索方式 | 搜索词: array an list | 搜索成功 停用词不作为参考 |
| 9 | 搜索模块 | 测试纯符号搜索词能否搜索成功,回车搜索方式 | 搜索词: %^&%$ | 搜索成功 无搜索结果 |
| 10 | 搜索模块 | 测试过长字段搜索词能否搜索成功,回车搜索方式 | 搜索词: 略(400字符) | 搜索成功 |
| 11 | 搜索模块 | 测试极短字段能否搜索成功,回车搜索方式 | 搜索词: y | 搜索成功 无搜索结果 |
| 12 | 搜索模块 | 搜索HTML格式,测试HTML标签是否被完全清洗,回车搜索方式 | 搜索词: <body> <html> | 搜索成功 无搜索结果 |
| 13 | 搜索模块 | 测试纯大写方式和小写方式搜索结果是否一样 | 搜索词: ARRAYLIST | 搜索成功 结果一致 |
| 14 | 搜索模块 | 测试大小写混合方式和小写方式搜索结果是否一样,回车搜索方式 | 搜索词: ArrayList | 搜索成功 结果一致 |
| 15 | 搜索模块 | 测试数字是否被识别为搜索词。 | 搜索词: 1 3 5 7 9 | 搜索成功 数字作为搜索词 |

**测试用例1:**测试纯英文搜索词能否搜索成功,点击搜索方式

第一次搜索失败,服务器拒绝连接,页面显示报错信息。

可能原因:搜索引擎对内存资源需求较大,低配服务器同时运行多个项目导致内存资源不足,服务器拒绝服务

修复方法:重启服务器,仅运行搜索引擎

第二次搜索成功

**测试用例5:**测试中英文混合搜索词能否搜索成功,点击搜索方式

搜索成功,但部分搜索结果简介部分没有截取成功

**原因:**后端在查找并添加高亮时忽略没有被空格包裹的单词,导致匹配失败,返回了一个空串。

点开文档页面,确有"hello"字段

**测试用例8:**测试包含停用词的搜索词能否搜索成功,回车搜索方式

发现an未被高亮处理,测试通过

**测试用例10:**测试过长字段搜索词能否搜索成功,回车搜索方式

搜索失败

**测试用例12:**搜索HTML格式,测试HTML标签是否被完全清洗,回车搜索方式

测试通过,HTML标签已被清洗

**测试用例13:**测试纯大写方式和小写方式搜索结果是否一样

测试通过

**测试用例15:**测试数字是否被识别为搜索词。

测试通过

(2)搜索结果展示功能

|--------|----------|-----------------|------------------------------|------|
| 测试用例序号 | 所属模块 | 测试目标 | 操作流程 | 预期结果 |
| 1 | 搜索结果列表模块 | 测试搜索结果列表是否被展示 | 1. 搜索array list | 正确展示 |
| 2 | 搜索结果列表模块 | 测试核心词是否被高亮 | 1. 搜索 array 2. 观察搜索结果列表 | |
| 3 | 搜索结果列表模块 | 测试多个核心词是否都被高亮 | 1. 搜索 array list 2. 观察搜索结果列表 | |
| 4 | 搜索结果列表模块 | 测试权重排序是否正确 | 1. 搜索 list 2. 比较第一篇和第二篇文档权重 | |
| 5 | 搜索结果列表模块 | 测试权重排序是否正确 | 1. 搜索 list 2. 比较第一篇和第十篇文档权重 | |
| 6 | 搜索结果列表模块 | 测试无搜索结果时,是否显示提示 | 1. 搜索 abcq wyp | |
| 7 | 搜索结果列表模块 | 测试搜索失败时,是否显示提示 | 1. 搜索过长字段 | |

**测试用例3:**测试多个核心词是否都被高亮

测试通过

**测试用例4:**测试权重排序是否正确

测试通过

**测试用例6:**测试无搜索结果时,是否显示提示

测试通过

(3)快捷键控制功能

测试步骤:

  1. 单机 / 键聚焦搜索框

  2. 使用键盘输入搜索词"array"

  3. 单击回车键进行搜索

  4. 使用 ↑ ↓ 控制选择文档

  5. 使用回车键打开选择的文档页面。

测试结果:

测试通过

过程图片:

4.1.2 自动化测试

自动化测试源码链接:https://gitee.com/wdhu/document-search-engine.git

覆盖功能:页面完整性、搜索功能

五、风险点

  1. 系统资源风险,搜索引擎对内存需求较高,低配服务器多项目并行时易出现内存溢出、服务拒绝连接(HTTP 500),如测试中首次搜索失败即因内存不足。

    1. 影响:服务稳定性差,并发访问或大数据量搜索时易崩溃,影响用户使用。

    2. 风险等级:高

    3. 应对措施:

      • 上线前单独部署搜索引擎服务,避免(或减少)与其他项目共享资源。

      • 优化代码内存占用,对索引加载、搜索结果缓存做内存限制。

      • 服务器配置升级

  2. 边界值风险,搜索输入过长搜索词会触发HTTP 500 服务器错误,前端未对过长搜索词进行校验。

    1. 影响:过长搜索词报错,且未有专门提示,用户体验差。

    2. 风险等级:中

    3. 应对措施:

      • 添加过长搜索提示

      • 前端进行校验

  3. 数据风险,项目依赖倒排索引 + 正排索引联合检索,索引建立依赖全文档扫描,若索引序列化反序列化异常,或文档更新(虽 JDK8 文档固定)易导致索引失效、搜索结果缺失。

    1. 影响:索引损坏时搜索功能完全不可用,且重建索引耗时较长。

    2. 风险等级:中

    3. 应对措施:

      • 增加校验机制,确认数据可用

      • 关注官方更新

  4. 兼容性风险,快捷键依赖浏览器事件监听,不同浏览器(如 IE、旧版 Chrome)可能存在兼容性问题

    1. 影响:失效可能影响用户体验

    2. 风险等级:低

    3. 应对措施:

      • 兼容更多环境

      • 优化监听逻辑

六、测试总结

本次测试针对JDK 8 API 文档搜索引擎,覆盖搜索功能、搜索列表展示、快捷键操作等功能,通过手工测试 + 自动化测试,验证系统核心能力及边界兼容性,整体核心功能达标,存在中高风险点需优化。

功能测试共设计23个测试用例,未通过测试用例3个,总体通过率约为87%。

测试出的问题:

  • 项目稳定性不足,内存依赖高,影响可用性。

  • 超长搜索词触发 HTTP 500;

  • 中英文混合搜索部分结果简介截取失败,高亮匹配逻辑需完善,兼容特殊格式关键词。

通过的测试:

  • 搜索功能:纯英文、带空格英文、中英文混合、大小写混合、数字搜索均正常;HTML 标签自动清洗、停用词过滤、大小写不敏感兼容均符合预期;无意义词、纯符号搜索返回无结果提示,逻辑正常。

  • 搜索结果展示功能:权重排序正常(词频 + 位置加权,标题权重更高);核心词高亮生效,多关键词组合高亮正常;无结果、搜索失败页面提示清晰;结果按 "标题 + 简介 + URL" 展示,符合主流搜索引擎体验。

  • 快捷键控制功能:/ 键聚焦搜索框、回车搜索、上下键选择结果、回车打开链接全流程正常;操作反馈清晰,提示文案易懂。

综上所述,项目整体可用,但仍有不小问题待优化。

相关推荐
霸道流氓气质1 小时前
Spring AI ChatMemory 对话记忆配置指南:概念、实战与常见问题
java·人工智能·spring
jiayong231 小时前
Python面试题集 - 数据结构与算法
开发语言·python
cui_ruicheng1 小时前
Linux线程(四):线程池、日志系统与单例模式
linux·开发语言·单例模式
伊甸31 小时前
Neo4j 常用语法速查(Cypher)
java·数据库·neo4j
小程故事多_801 小时前
深度解析Claude Code,AI编码助手的底层架构与工作原理
java·人工智能·架构·智能体
文祐1 小时前
三维数组在内存中的分布
开发语言·内存
通往曙光的路上1 小时前
JUCJUCJUC
java·前端·数据库
kaikaile19951 小时前
基于 MATLAB 的3D 蒙特卡洛光子传输模拟
开发语言·matlab·3d
吴声子夜歌1 小时前
Java——ArrayList
java·arraylist