3、数据目录的搜索与发现:全文搜索、标签搜索、高级筛选、数据预览与采样
数据目录建好了,元数据也采集上来了。但团队里的人怎么找到自己想要的数据?
说白了,搜索与发现功能就是数据目录的「入口」。入口好不好用,直接决定了自助取数能不能落地。我在好几个项目里都见过这种情况——目录里数据资产很全,但没人用,因为搜不到、筛不准、不敢信。
这一章,我把搜索与发现的几个核心能力拆开来讲。全文搜索、标签搜索、高级筛选、数据预览与采样,每个都是实战中踩过坑才总结出来的。
3.1 全文搜索:别让用户猜关键词
全文搜索是最基础的能力。用户输入一个词,系统把表名、字段名、描述、注释里匹配的内容都列出来。
听起来简单?其实坑不少。
我曾经遇到过一个场景:业务方想找「用户活跃度」相关的表。他搜「活跃」,没结果。搜「活跃度」,还是没结果。最后发现表名叫「user_dau_stats」,中文描述里写的是「日活跃用户统计」——但分词器把「日活跃用户」切成了「日」「活跃」「用户」,而搜索时用的是精确匹配。
嗯,这里要注意:分词策略和匹配模式必须灵活。
我建议全文搜索至少支持以下几种模式:
| 匹配模式 | 说明 | 适用场景 |
|---|---|---|
| 精确匹配 | 用户输入完整关键词,完全命中 | 已知表名或字段名 |
| 模糊匹配 | 关键词被分词后,任意片段命中即可 | 记不清完整名称 |
| 同义词扩展 | 自动匹配同义词(如「用户」↔「客户」) | 业务术语不统一 |
| 拼音/首字母 | 支持拼音或英文缩写 | 中文输入不便 |
小技巧:我个人习惯在搜索结果里高亮匹配到的关键词,并且把匹配度最高的结果排在最前面。匹配度可以按「表名 > 字段名 > 描述 > 注释」的优先级加权。
3.2 标签搜索:给数据打上「业务标签」
全文搜索依赖文本内容。但很多时候,数据本身的命名和描述并不能反映它的业务含义。
举个例子:一张表叫「ods_order_2024」,从技术角度看它是一张订单表。但业务方想知道的是——这张表是不是「核心交易数据」?是不是「财务对账用」?是不是「仅限内部使用」?
这些信息,靠全文搜索是搜不出来的。需要标签。
标签搜索的核心逻辑其实很简单:
- 给数据资产打标签(手动或自动)
- 用户通过标签来筛选和发现数据
- 标签可以组合使用,缩小范围
我在项目中遇到过一种情况:标签打得太随意,一个表上挂了十几个标签,结果搜索时反而更混乱了。后来我们定了规则——每个数据资产最多打 5 个核心标签,并且标签要有层级。
标签的层级结构大概是这样:
业务域:交易 / 用户 / 商品 / 财务
数据敏感度:公开 / 内部 / 机密 / 绝密
数据来源:埋点 / 业务库 / 第三方 / 手工录入
数据时效:实时 / 小时级 / 天级 / 周级
数据质量:高 / 中 / 低(需人工确认)
用户搜索时,可以点选「交易」+「机密」+「天级」,瞬间定位到符合条件的表。你想想看,这比全文搜索高效多了。
3.3 高级筛选:组合条件精准定位
全文搜索和标签搜索能解决大部分场景。但遇到数据资产特别多的情况(比如几千张表),还是不够。
这时候就需要高级筛选了。
高级筛选的本质是「多维度组合查询」。用户可以通过多个条件来缩小范围,比如:
- 数据源类型:MySQL / Hive / Kafka / ClickHouse
- 最近更新时间:近7天 / 近30天 / 自定义范围
- 数据量级:小于100万行 / 100万-1亿 / 大于1亿
- 拥有者:某个团队或个人
- 数据质量等级:高 / 中 / 低
我记得有一次,业务方想找「最近一周更新过的、数据量在100万到1亿之间的、由交易团队维护的MySQL表」。如果没有高级筛选,他得翻几十页才能找到。有了筛选,3秒钟搞定。
核心原则:高级筛选的每个条件都要有明确的业务含义,不要堆砌技术参数。用户不需要知道「分区数」「存储格式」「压缩算法」这些细节——除非他主动要求看。
3.4 数据预览与采样:先看后取,降低试错成本
搜索到了,筛选完了,用户找到了一张看起来对的表。然后呢?
他敢直接用吗?
说实话,不敢。因为表名和描述可能跟实际数据对不上。我在项目里见过太多次了——「用户表」里其实存的是订单数据,「日活表」的日期字段居然是字符串格式。
所以,数据预览与采样是自助取数里最关键的一环。没有预览,用户不敢用;没有采样,用户不知道怎么用。
数据预览通常包含以下几个部分:
| 预览内容 | 说明 | 为什么重要 |
|---|---|---|
| 字段列表 | 展示所有字段名、类型、注释 | 确认字段是否存在、类型是否匹配 |
| 样例数据 | 随机抽取 10-100 行数据 | 看数据长什么样,有没有空值、异常值 |
| 数据统计 | 行数、空值率、唯一值数、最大值/最小值 | 评估数据质量和分布 |
| 数据血缘 | 展示数据从哪里来、到哪里去 | 确认数据来源可信 |
我建议:采样时不要只取前 N 行,因为前 N 行可能都是同一个分区的数据。最好用随机采样,或者按时间分区均匀采样。这样用户看到的数据分布才真实。
另外,数据预览还有一个隐藏价值——降低沟通成本。以前业务方要取数,得先问数据团队「这张表里有什么字段?数据准不准?」。现在他自己预览一下,大部分问题就解决了。数据团队只需要处理那些预览后仍然有疑问的复杂场景。
3.5 搜索与发现的核心流程
说了这么多,我把整个搜索与发现的流程画了一张图,方便你理解各个模块之间的关系。
3.6 避坑指南
最后,分享几个我在实战中踩过的坑,希望能帮你少走弯路。
我曾经在一个项目里把全文搜索的索引建得太细,结果索引文件比数据本身还大,搜索速度反而变慢了。后来调整了分词策略,只对表名、字段名、描述建立索引,注释和备注只做模糊匹配——速度提升了 5 倍。
还有一个坑:标签搜索的权限控制。有些标签是敏感信息(比如「机密数据」),不是所有人都能看到。如果标签本身没有权限控制,用户通过标签搜索就能发现他不该看到的数据。嗯,这一点很容易被忽略。
我的建议:数据预览的采样速度一定要快。用户等 3 秒以上就会失去耐心。如果表很大,可以预先采样并缓存结果,或者只采样一个分区。别让用户每次预览都去跑全表扫描。
搜索与发现,说白了就是让用户「找得到、看得懂、敢使用」。全文搜索解决「找得到」,标签搜索和高级筛选解决「找得准」,数据预览与采样解决「敢使用」。这三个环节缺一不可。