1. 立项与背景
随着医疗器械行业监管趋严、技术迭代加速,行业对高质量、结构化、可追溯的技术资料需求日益增长。为满足企业、研究机构及监管部门对国内外医疗器械相关文档(如产品说明书、注册资料、技术白皮书、临床报告等)的高效检索、安全访问与合规管理需求,本项目启动建设“医疗器械文库平台”。
平台V1版本已初步完成基础文档存储与展示功能,但在海量数据处理、搜索精准度、系统扩展性及安全防护方面存在明显瓶颈。因此启动V2版本重构,目标是打造一个高性能、高可用、可服务化的专业文库系统,支撑千万级文档规模下的快速检索、权限控制与内容安全。
2. 软件功能与核心模块介绍
整体功能概览:
智能搜索:基于 Elasticsearch 的全文检索,支持关键词、器械分类、注册证号、厂商等多维度组合查询
权限体系:基于角色与文档密级的细粒度访问控制
核心模块详解:
智能搜索优化模块
重构 Elasticsearch 索引策略,引入同义词库、分词优化(针对医疗器械专业术语)
支持模糊匹配、拼音首字母检索、语义相关性排序
查询响应时间从 V1 的 1.2s 优化至 200ms 以内(千万级数据)
实现基于 Redis 的请求频率限制(IP + 用户维度)
3. 主要业务流程
用户输入关键词 → 前端调用搜索接口 → 后端路由至搜索服务 → 查询 Elasticsearch 并融合权限过滤 → 返回结果列表 → 用户点击某文档 → 验证访问权限 → 渲染带水印的在线预览页并提供受控下载
架构设计理念:
平台 V2 采用 “分层解耦 + 服务化 + 高性能数据管道” 的整体架构思路,目标是实现高并发、高可用、易扩展、安全可控的医疗器械文库系统
我主要负责:
数据录入:由爬虫部爬取数据并按照语雀文档对应字段存储MongoDB,数据录入到es新索引表,由mysql控制当前业务使用的es索引表。
搜索服务:Elasticsearch 7.0 + ik 分词器 + 自定义同义词库
其他页面接口:列表、详情、下载等
遇到的难点和坑:
1. Elasticsearch 在医疗器械专业术语下的召回率低
问题:用户搜“心梗支架”,但文档中写的是“冠状动脉药物洗脱支架”,无法匹配。
踩坑:初期直接使用 ik_max_word 分词,效果差;尝试拼音全拼又导致噪音过多。
解决方案:
构建医疗器械专属同义词库(覆盖 2000+ 器械别名、缩写、商品名);
引入拼音首字母索引(如“xgzj” → “心梗支架”);
在 ES 查询时组合 multi_match + synonym_graph + ngram 策略;
结果:关键场景召回率从 45% 提升至 80%+。