3、数据目录的搜索与发现:全文搜索、标签搜索、高级筛选、数据预览与采样

数据目录建好了,元数据也采集上来了。但团队里的人怎么找到自己想要的数据?

说白了,搜索与发现功能就是数据目录的「入口」。入口好不好用,直接决定了自助取数能不能落地。我在好几个项目里都见过这种情况——目录里数据资产很全,但没人用,因为搜不到、筛不准、不敢信。

这一章,我把搜索与发现的几个核心能力拆开来讲。全文搜索、标签搜索、高级筛选、数据预览与采样,每个都是实战中踩过坑才总结出来的。

3.1 全文搜索:别让用户猜关键词

全文搜索是最基础的能力。用户输入一个词,系统把表名、字段名、描述、注释里匹配的内容都列出来。

听起来简单?其实坑不少。

我曾经遇到过一个场景:业务方想找「用户活跃度」相关的表。他搜「活跃」,没结果。搜「活跃度」,还是没结果。最后发现表名叫「user_dau_stats」,中文描述里写的是「日活跃用户统计」——但分词器把「日活跃用户」切成了「日」「活跃」「用户」,而搜索时用的是精确匹配。

嗯,这里要注意:分词策略和匹配模式必须灵活。

我建议全文搜索至少支持以下几种模式:

匹配模式 说明 适用场景
精确匹配 用户输入完整关键词,完全命中 已知表名或字段名
模糊匹配 关键词被分词后,任意片段命中即可 记不清完整名称
同义词扩展 自动匹配同义词(如「用户」↔「客户」) 业务术语不统一
拼音/首字母 支持拼音或英文缩写 中文输入不便

小技巧:我个人习惯在搜索结果里高亮匹配到的关键词,并且把匹配度最高的结果排在最前面。匹配度可以按「表名 > 字段名 > 描述 > 注释」的优先级加权。

3.2 标签搜索:给数据打上「业务标签」

全文搜索依赖文本内容。但很多时候,数据本身的命名和描述并不能反映它的业务含义。

举个例子:一张表叫「ods_order_2024」,从技术角度看它是一张订单表。但业务方想知道的是——这张表是不是「核心交易数据」?是不是「财务对账用」?是不是「仅限内部使用」?

这些信息,靠全文搜索是搜不出来的。需要标签。

标签搜索的核心逻辑其实很简单:

  1. 给数据资产打标签(手动或自动)
  2. 用户通过标签来筛选和发现数据
  3. 标签可以组合使用,缩小范围

我在项目中遇到过一种情况:标签打得太随意,一个表上挂了十几个标签,结果搜索时反而更混乱了。后来我们定了规则——每个数据资产最多打 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 秒以上就会失去耐心。如果表很大,可以预先采样并缓存结果,或者只采样一个分区。别让用户每次预览都去跑全表扫描。

搜索与发现,说白了就是让用户「找得到、看得懂、敢使用」。全文搜索解决「找得到」,标签搜索和高级筛选解决「找得准」,数据预览与采样解决「敢使用」。这三个环节缺一不可。