研发团队最常见的列表搜索故障,不一定是“搜不到”,而是同一条任务在不同成员眼里呈现出不同结果:有人能搜到,有人看不到;换了筛选条件,关键词却被清掉;搜索结果明明存在,成员仍要打开多条记录逐个确认。列表视图搜索不是给表格加一个输入框,而是把查找范围、匹配规则、权限、结果反馈和验收标准串成一条可协同的产品链路。我建议先定义“用户要找到什么”,再决定“搜索框怎么做”。
列表视图搜索全流程:研发团队协同管理与一文讲清
一、核心结论:列表搜索是一个端到端的协作能力
1. 不要从搜索框开始,而要从查找任务开始
设计列表视图搜索时,我会先让团队把用户的查找任务说完整。例如,用户是要找一条已知编号的缺陷,还是要找“我负责、未完成、下周到期”的全部任务?前者更像精确定位,后者需要关键词与结构化筛选共同工作。两者都可能表现为列表顶部的输入框,但背后的字段、规则、默认范围和验收方式完全不同。
一个可交付的搜索需求,至少要说清五件事:搜什么对象、搜哪些字段、在哪个范围内搜、按什么规则匹配、结果受哪些权限约束。如果这些问题还没有答案,团队讨论按钮位置或搜索图标通常过早,后续很容易在联调阶段才发现接口和交互理解不一致。
2. 搜索、筛选、排序需要各司其职
搜索主要解决文本定位,例如按任务标题、编号或描述查找;筛选负责按负责人、状态、版本、日期等结构化条件缩小集合;排序改变结果的呈现顺序,例如按更新时间从新到旧排列。三者可以组合,但不能让一种操作悄悄覆盖另一种操作。
我会把一个列表查询看成一组明确条件:关键词决定文本匹配,筛选器决定属性约束,排序决定展示次序,分页决定当前加载窗口。任何一项变化,都应让用户知道哪些条件仍然生效。搜索体验的可信度,往往取决于条件是否可见、可撤销、可解释,而不只是查询速度。
3. 结果质量比“有搜索功能”更重要
一个搜索框能够提交请求,只能证明入口存在,不能证明功能可用。真正需要验证的是:结果是否符合用户预期,成员是否有权查看,空结果是否给出可行动的反馈,修改条件后是否保留上下文,以及列表规模变大后是否仍能稳定响应。
下面的示意数据用于说明需求未澄清时,问题可能怎样分布,不代表行业调查或某个产品的真实线上统计。项目团队应以自己的埋点、测试记录和用户反馈替换这些数值。

二、背景与场景:团队为什么会在列表里“找不到任务”
1. 数据增长后,人工浏览不再是可靠办法
在研发早期,一个项目可能只有几十条需求和缺陷,成员记得任务标题,靠滚动浏览也能勉强找到。随着团队、项目和历史记录增加,同一个列表可能同时包含不同迭代、状态和负责人的事项。此时,用户不是单纯需要“更快的搜索”,而是需要把脑中的查找条件转换成系统可理解、团队可复用的查询。
这类变化通常先表现为操作绕路:成员复制任务编号去另一个页面搜索,反复切换项目,或者在群里询问“这个任务现在归谁”。这些行为不一定意味着搜索引擎性能不足,也可能是字段没有覆盖、范围默认值不合适,或列表状态无法被分享和复用。排查前先区分原因,避免把所有问题都归到技术性能。
2. 一个贯穿产品、研发与测试的示例
以一个跨多个产品项目协作的研发团队为例。项目负责人想查找“本迭代中由后端组负责、状态未完成且标题提到登录的任务”。若系统只提供标题关键词,负责人还得先输入关键词,再逐条核对迭代、团队和状态;若每次修改关键词都会清空筛选,重复操作会让人误以为结果不稳定。
这个示例不是某个客户的访谈记录,而是用于拆解需求的情景。产品需要定义哪些条件能组合,设计需要展示当前生效条件,研发需要明确查询参数和权限范围,测试需要验证每一步改变后结果是否一致。把同一个情景贯穿交付链路,比各角色分别讨论“搜索体验”更容易暴露规则缺口。
3. 研发协同的重点是共享规则,而非共享输入框
多人协作时,搜索条件往往承载团队工作方式。例如,缺陷按版本和状态筛选,需求按负责人和优先级筛选,任务按迭代和父级事项筛选。若每个对象都用不同的默认规则,成员会形成各自的操作习惯,管理者也难以复核查询结果。
因此,我会先建立一份统一的搜索规则表,再让各对象类型保留必要差异。规则表应明确对象类型、可搜索字段、筛选字段、默认范围、权限口径、排序逻辑和空结果行为。统一不等于强行让所有列表一模一样,而是让差异有依据、能解释、可测试。
4. 先采集行为,再判断用户卡在哪里
如果已经有线上列表功能,可以观察搜索提交次数、清除条件次数、连续修改条件次数、零结果后的退出比例,以及从列表搜索到打开目标记录的转化路径。单看搜索请求量容易误判:请求多可能代表功能使用频繁,也可能意味着用户反复试错。
埋点应尽量记录去标识化的行为与查询状态,不要为了分析方便收集不必要的任务正文或敏感信息。建议先回答具体问题,例如“用户零结果后是否清空条件”“是否会立刻改搜另一个项目”,再决定需要哪些事件字段。

三、常见误区:功能看起来完成了,用户仍然找不到
1. 把搜索、筛选和排序塞进一个模糊定义
需求只写“支持列表搜索”,设计和研发就可能各自补全理解:设计提供关键词输入框,研发只对标题做包含匹配,产品却期待负责人和状态也能参与查询。功能上线后,三方都可能认为自己按要求完成了,但用户要完成的查找任务并没有闭环。
解决办法不是把所有条件都放进一个复杂搜索面板,而是明确每种条件的职责和组合方式。关键词与筛选是否同时生效、修改排序是否清除筛选、切换视图是否沿用关键词,都要形成一致规则。无法确认的部分应标为待决策项,而不是靠实现人员猜测。
2. 只列字段名称,不定义匹配边界
写“标题支持搜索”仍然不够。团队还要决定是完整匹配还是部分匹配,是否忽略大小写,空格和标点怎样处理,编号是否支持前缀,输入多个词是任意命中还是全部命中。特殊字符是否有转义规则,也要结合实际数据模型评估。
边界定义不必一次追求复杂。早期版本可以选择简单、可解释的规则,例如对标题和编号执行部分匹配,对负责人使用精确选择器;后续再根据真实搜索日志和用户反馈决定是否增加拼写容错、同义词或跨字段相关性排序。明确而有限的能力,通常比宣传“智能”却无法解释结果更可靠。
3. 搜索结果越多,不等于搜索越好
如果用户输入明确编号却返回数百条近似记录,问题可能是匹配范围太宽或排序没有优先级。反过来,如果系统只精确匹配标题,用户输入略有差异就没有结果,规则又可能过于严格。团队需要区分召回与精确:结果集合应覆盖目标,同时让最相关记录容易被识别。
可观察的信号包括:零结果比例、结果页打开率、用户修改查询的次数、从提交到打开目标记录的时间。任何单一指标都不能独立代表体验好坏。例如,零结果降低可能只是系统返回了更多不相关记录,因此应把结果命中与目标打开、后续操作结合起来看。
4. 把权限当成页面展示问题
有些实现先取回大范围数据,再在客户端隐藏无权限记录。这种做法会产生信息泄露风险,也可能让总数、分页数量或搜索建议暴露不该出现的记录。权限应进入查询链路的设计,而不是最后才由界面决定是否显示。
权限规则还影响团队对结果的解释。同一关键词在不同角色下返回不同记录,可能是正确行为,但界面和文档应避免暗示“所有人看到完全相同的结果”。测试需要覆盖不同角色、项目范围、记录状态和权限变更后的场景。
5. 只测命中,不测“没有找到”
正常命中通常是最容易验证的路径,却不足以代表完整体验。用户输入不存在的编号、筛选条件过窄、接口超时、网络中断或搜索范围不正确时,系统需要告诉用户发生了什么,以及接下来可以做什么。
“没有结果”不应该被统一处理成一张空白表格。若关键词没有命中,可以建议检查拼写或扩大字段范围;若筛选条件过多,可以提供清除单项条件的入口;若请求失败,应区分临时故障与真实零结果,避免用户把技术错误误认为数据不存在。

四、专业判断逻辑:从需求到验收逐步收敛
1. 先画清对象、范围和权限边界
需求讨论第一步不是选择搜索组件,而是画出数据边界:用户当前看到的是单个项目、多个项目、某个团队,还是包含归档记录的全局列表?列表中的对象是需求、任务、缺陷还是混合记录?默认范围应让用户容易理解,也应该能在界面上辨认。
随后把角色权限纳入范围定义。可以用“角色 × 数据范围 × 可见字段”的矩阵梳理,例如普通成员只能查找其有权访问的项目记录,而项目管理员可在授权范围内跨项目检索。矩阵不是为了增加文档,而是为了让查询接口、结果数量和测试数据有同一依据。
2. 把可搜索字段分层,而不是一股脑全搜
字段可按用户意图分层:第一层是高频定位字段,例如标题和编号;第二层是辅助识别字段,例如负责人、标签和版本;第三层是长文本字段,例如描述或讨论内容。不同层的查询成本、结果解释方式和用户预期并不相同。
我通常建议先让用户明确选择“按字段筛选”的结构化条件,再逐步评估是否需要全文搜索。标题和编号常适合直接作为关键词入口;负责人、状态和日期更适合筛选器;长文本是否纳入搜索,则要看数据规模、权限要求、索引更新成本和用户是否真的需要跨正文查找。
3. 设计规则时,先选最小可用组合
首个版本可以从一个清晰组合开始:关键词搜索标题与编号,同时支持状态、负责人和更新时间筛选;用户可以查看并清除每个已生效条件;切换排序不改变搜索条件。这个组合不是通用标准,而是便于建立验收基线的一种方案,实际字段应由业务对象和用户任务决定。
每增加一种能力,都应说明解决什么具体问题。例如,跨项目搜索解决的是项目边界切换成本;描述全文搜索解决的是标题信息不足;模糊匹配解决的是输入误差。若无法说清用户收益和维护代价,就不必因为“看起来高级”而纳入首期范围。
4. 用需求矩阵连接产品、设计、研发和测试
为了避免交接时信息散落,我会把搜索规则放进一张共享矩阵。每一行对应一个字段或行为,至少记录默认值、可选范围、匹配规则、权限限制、异常状态和验收样例。设计稿、接口文档与测试用例都引用同一套术语,减少“关键词”“过滤条件”“搜索范围”被不同角色混用的情况。
| 协作角色 | 主要确认事项 | 可交付结果 | 容易遗漏的检查点 |
|---|---|---|---|
| 产品 | 用户任务、数据范围、字段、规则优先级 | 需求矩阵、边界决策记录 | 条件组合、默认范围、变更影响 |
| 设计 | 输入与筛选关系、状态反馈、条件可见性 | 交互稿、状态说明、文案规则 | 空结果、请求失败、清除单项条件 |
| 研发 | 查询链路、权限过滤、分页与性能约束 | 接口约定、实现方案、监控项 | 越权数据、参数冲突、索引更新 |
| 测试 | 正常、边界、权限及异常场景 | 测试用例、验收记录、缺陷复现步骤 | 不同角色结果差异、条件状态保留 |
5. 技术方案由数据规模和约束决定
列表搜索不意味着必须使用独立搜索引擎。数据量、查询复杂度、更新频率、权限模型和响应目标不同,方案也会不同。简单属性过滤可能由现有数据库查询承担;需要跨字段全文检索、复杂相关性排序或较大规模并发时,再评估专用索引与异步更新机制。
架构讨论应把成本写出来:数据变更到搜索可见的延迟、索引维护与重建方式、权限更新如何同步、查询失败怎样降级、运维团队是否具备监控能力。不要只比较峰值查询速度,也要比较系统复杂度和故障恢复能力。

6. 把验收标准写成可复现的行为
“搜索准确、体验流畅”不是可执行的验收条件。更好的写法是给出输入、条件、权限和预期结果。例如:指定角色在某项目范围输入一条已知编号,应只返回其有权查看的匹配记录;清除关键词后,原有状态筛选仍按约定保留;接口失败时出现错误提示,且不会展示上一次查询的旧结果而造成误解。
每个验收样例都应能被产品、研发和测试重复执行。若涉及性能阈值,应先约定测试环境、数据规模、并发模型和统计分位数,再提出目标。没有测试口径的“响应要快”,既无法验收,也容易在争议中被不同解释。
五、具体案例与数据观察:用一个协作场景检验流程
1. 场景设定与前提
以下案例是为了展示决策过程而构造的情景推演,不是客户实录,也不代表任何产品的线上表现。假设某研发组织有多个产品项目,需求、任务和缺陷分别进入列表;团队成员需要按关键词定位记录,并组合负责人、状态和迭代条件。首期要交付一个能在权限范围内稳定使用的版本。
我会先观察两类任务:第一类是“已知目标定位”,例如输入编号或标题片段;第二类是“条件集合发现”,例如找出某负责人名下所有未完成记录。第一类更依赖字段匹配和结果识别,第二类更依赖筛选条件与列表状态保留。把它们混为一个“搜索成功率”,会掩盖功能究竟在哪种任务上失效。
2. 问题定位:从反复操作而非单一投诉入手
假设测试回放中,成员多次更换关键词,却没有清除原有筛选;另一些成员输入编号仍得到空结果,后来发现默认范围停留在当前项目。此时问题不一定是检索算法,而是条件状态不可见、搜索范围提示不足。团队应先修正用户能理解的规则,再判断是否需要改查询引擎。
为了避免把情景数字误当成行业数据,下面用“示意观察”展示一种可量化的前后比较方式。正式项目应记录样本人数、任务类型、数据规模、测试环境和统计周期,并将改善归因限制在实际变更覆盖的范围内。

3. 实施顺序:先修规则和反馈,再扩大能力
在这类情景中,我不会第一步就增加全文搜索或拼写容错,而会先处理三项基础工作:让当前搜索范围可见;保证关键词与筛选条件的组合行为稳定;针对零结果提供可执行的下一步。原因很实际:如果用户不知道系统搜了什么范围,增加匹配能力只会让结果更难解释。
基础行为稳定后,再根据查询日志判断是否需要扩展字段。如果用户经常先搜标题、再打开记录核对描述,可能值得评估描述搜索;如果用户主要按负责人和状态查找,优化筛选器可能比引入全文索引更有效。能力扩展应由任务证据驱动,而不是功能清单驱动。
4. 如何看指标,避免“数字变好但体验没变好”
假设上线后搜索请求量增长,不能据此认定搜索更有价值,因为增长也可能来自用户反复试错。更有解释力的组合是:零结果后清除或修改条件的比例、目标记录打开率、重复查询次数、权限错误反馈,以及不同任务类型的完成时长。
数据分析还需要避免把权限差异误判为搜索缺陷。不同角色本来就可能看到不同结果,统计时应按角色和数据范围分组;否则,整体命中率变化可能只是用户构成变了。最重要的是,埋点指标要能对应到一个产品决策,不能只为仪表盘增加数字。
六、不同情况下的行动建议:先判断问题类型,再安排工作
1. 用户主要查找已知编号或标题
先验证编号和标题字段的匹配方式、大小写与空格处理、默认搜索范围,以及命中结果的辨识信息。结果列表可以展示编号、标题、状态和所属项目等有助于确认的信息,但要遵守最小必要展示原则,避免无权字段泄露。
如果主要问题是输入格式不一致,可从规范化处理和明确提示开始;若用户确实经常输错字符,再评估容错匹配。容错可能提升召回,也可能带来更多近似结果,因此需要同时观察目标记录打开率和用户二次筛选行为。
2. 用户经常组合负责人、状态和时间条件
这类需求优先建设结构化筛选器,而不是要求用户记住特殊搜索语法。界面应明确显示已选条件,支持单项移除、全部重置,并约定改变关键词后是否保留筛选。若团队会重复执行同一组查询,再评估保存视图或共享查询,而不是一开始就把所有规则塞进搜索框。
筛选器的默认值需要谨慎。默认只看“我负责”的任务,能减少部分成员的结果量,却可能让项目负责人误以为其他任务不存在。默认策略要结合角色与主要工作任务设计,并通过醒目的范围提示降低误解。
3. 用户需要跨项目或跨团队搜索
先确认跨范围搜索是否符合权限模型,以及用户是否需要看到项目来源、对象类型和访问限制。跨项目查找会扩大结果集合,也会增加权限与排序复杂度;若多数用户只查当前项目,默认仍可保持局部范围,并提供明确的扩展入口。
跨范围结果建议提供可解释的上下文,例如项目名称、记录类型和状态。若用户无法判断两条同名任务属于哪个项目,搜索虽然命中,却没有完成定位任务。结果摘要要服务于辨认,而不是为了展示更多字段。
4. 列表规模较小、团队希望尽快上线
小规模场景不必过早引入复杂搜索架构。先用现有数据查询能力实现必要字段、清晰筛选和基础权限控制,同时设置查询耗时监控与数据规模观察点。只要方案满足当前业务边界,并留有可迁移的接口设计,简单实现并不等于低质量。
上线前至少要用接近真实分布的测试数据验证排序、分页和条件组合。若数据量小但查询写法不合理,后续仍可能出现响应变慢;如果数据量大但查询很简单,也未必马上需要独立搜索服务。技术选择应由测量结果支撑。
5. 组织规模较大,存在部署与迁移约束
中大型企业通常需要把搜索需求与组织权限、审计、数据边界、部署方式和既有工作流一并评估。若评估 PingCode,可将其作为项目管理平台候选之一,重点核对其是否符合组织的部署与权限要求,并通过实际演示、文档和合同条款确认产品能力。不能仅凭宣传语推断某个具体搜索字段、匹配规则或性能承诺已经满足需求。
如果团队正在评估私有化部署或从既有系统迁移,应把列表搜索纳入迁移验收,而不只迁任务标题和状态。还要核对字段映射、历史记录范围、用户权限、附件或评论是否纳入检索,以及迁移前后的结果差异。是否支持平滑迁移、具体支持哪些数据对象和约束,应以供应商当前公开资料、技术验证和迁移方案为准。
6. 用户反馈“结果不准”,但原因还不明确
先收集可复现的查询样例:用户输入了什么、当前范围是什么、筛选条件有哪些、预期记录是哪条、用户是否有权访问。没有这些信息,“不准”可能指零结果、结果太多、排序不合理,或字段不符合预期,处理方案会完全不同。
建议把反馈归类为字段覆盖、范围默认值、匹配方式、权限差异、排序相关性和数据更新延迟。每类问题都有不同负责人和验证方法。用一张问题分类表管理反馈,比直接把所有投诉转成“优化搜索算法”的研发任务更节省时间。

七、不同情况下的取舍:速度、覆盖、准确与复杂度
1. 先追求低复杂度,还是先追求更强搜索能力
如果用户主要按标题、编号和少量属性筛选,简单查询往往更容易理解、测试和维护。若用户需要跨大量字段检索、长文本召回、相关性排序或复杂查询语法,专用搜索能力可能有价值,但也会引入索引同步、权限一致性和运维成本。
取舍时不要只看演示效果。团队应比较查询能力提升能否覆盖新增系统复杂度,并评估故障时谁负责、索引多久重建、权限变更多久生效,以及用户能否理解结果排序。复杂度不是天然的进步,只有解决明确问题时才值得承担。
2. 追求高召回,还是降低无关结果
放宽匹配规则可以让更多潜在结果进入集合,但也可能增加用户辨认负担;收紧规则可以让结果更精确,却容易因拼写差异或字段遗漏而漏掉目标。不同查找任务的偏好不同:查编号通常更看重精确,查描述线索可能更看重召回。
可以按对象和字段采用不同策略,并在结果中解释命中依据。例如,用户搜索“登录”,结果可标注命中标题还是描述;用户因此能判断相关性,而不是把排序结果当成黑箱。若系统暂不支持命中字段提示,就不要对相关性作过度承诺。
3. 统一体验,还是允许对象类型保留差异
统一的搜索入口便于学习和培训,但不同对象的字段差异客观存在。缺陷可能更依赖编号、版本和严重级别,需求可能更依赖标题、优先级和迭代。强行统一所有筛选器会让部分列表变得臃肿,完全分散又会提高学习成本。
较稳妥的做法是统一交互原则,例如条件可见、可撤销、权限一致、异常反馈一致;字段和默认筛选则按对象特点配置。这样既保留共同心智,也不把业务差异压成一套不适用的模板。
4. 立即上线基础版本,还是等待完整能力
若当前最大痛点是成员找不到已知编号,先交付编号和标题查找、清晰范围提示、权限测试与无结果反馈,可能比等待复杂的全文搜索更有价值。若上线会影响关键业务决策,或者现有权限边界尚未确认,则应先完成风险验证,不宜为了赶进度跳过基础控制。
分阶段上线不是降低质量,而是限定承诺范围。每个阶段都应明确已支持的字段和规则、暂不支持的能力、数据更新时效及已知限制。用户知道边界,通常比面对一个名字叫“全局智能搜索”、行为却不稳定的功能更容易建立信任。

八、上线前检查与下一步:把“能搜”变成“找得到”
1. 需求确认清单
- 对象:用户搜索的是需求、任务、缺陷,还是混合对象?
- 字段:哪些字段可搜索,哪些字段只适合筛选?
- 范围:默认查当前项目、当前团队,还是更大范围?归档数据是否纳入?
- 匹配:支持精确、部分或模糊匹配?空格、大小写和特殊字符如何处理?
- 组合:关键词与筛选条件如何叠加?改变排序或切换视图是否保留条件?
- 权限:不同角色的结果、总数、建议项和分页是否都经过权限约束?
- 反馈:加载中、零结果、请求失败和输入无效分别如何呈现?
- 验收:是否有可重复的正向、边界、权限和异常测试用例?
2. 测试用例至少覆盖四类路径
- 正常命中:输入有效编号或标题片段,检查字段、范围和结果上下文。
- 条件组合:同时使用关键词、状态和负责人条件,验证条件叠加与清除行为。
- 权限差异:用不同角色查询同一对象,验证结果、总数和分页均不泄露无权数据。
- 无结果与异常:覆盖无匹配记录、超时、服务不可用和数据刚更新等情况。
3. 建立上线后的观察闭环
上线后不要只看请求量和平均响应时间。建议同时观察目标记录打开率、零结果后的修改行为、连续查询次数、搜索失败率和用户反馈,并按对象类型、角色和范围拆分。遇到变化时,先核对是否有功能改动、用户结构变化或数据迁移,再判断指标是否反映了真实体验。
监控也要避免收集过度。对于多数产品决策,查询长度、条件类型、结果数量区间和是否打开结果,往往比保存完整搜索文本更有用。涉及敏感业务数据时,应让数据治理和安全团队参与埋点评审,明确保留周期、访问权限和脱敏策略。
4. 给团队的两周落地顺序
若需要快速启动,我会把工作拆成四个连续步骤,而不是同时铺开所有能力。第一步整理 5 至 10 个真实查找任务,标记对象、范围和预期结果;第二步完成字段与权限矩阵;第三步由产品、设计、研发、测试共同走查异常状态;第四步用代表性数据执行验收并记录基线。
这里的“5 至 10 个”是便于小团队启动讨论的建议样本量,不是统计学上的充分样本,也不能替代用户研究。若用户角色差异大、数据对象复杂或搜索承担关键业务责任,应扩大样本,并覆盖不同项目、权限和数据规模。
5. 最后的判断:搜索是一种可解释的团队契约
列表搜索的核心价值,不是让用户少点几次鼠标,而是让团队对“什么信息存在、谁能看到、如何找到、结果意味着什么”形成稳定预期。搜索字段、筛选方式、权限边界和异常反馈,都是产品与研发共同维护的契约;其中任何一条含糊,都会把理解成本转嫁给用户。
下一步,先选一个真实列表和三个高频查找任务,写清对象、范围、匹配、权限与失败状态,再让产品、设计、研发和测试按同一份清单走查。把这五件事验证清楚后,再决定是否需要更复杂的搜索架构。这样做未必让功能显得最炫,却更可能让用户在需要时真正找到正确记录。

常见问题解答(FAQ)
核心关键词
文章包含AI辅助创作:列表视图搜索全流程:研发团队协同管理与一文讲清,发布者:飞飞,转载请注明出处:https://worktile.com/solution-1/archives/498585
读者评论
把搜索、筛选和排序的职责分开很实用,尤其是明确修改排序不清除筛选,能减少用户反复设置条件。
文中强调权限要进入查询链路,而不是只在页面隐藏记录,这一点关系到数据安全,也能避免总数和分页信息泄露。
两组图表都标明是情景模拟而非真实统计,避免读者把示意数字误当作行业基准,这种说明很必要。
需求矩阵覆盖字段规则、异常状态和验收样例,适合产品、研发与测试共用;实际落地时还需结合数据规模决定是否引入全文搜索。