用途:在 Frappe v14-v16 中实现搜索功能,涵盖四类子系统。链接字段搜索(frappe.desk.search)用于 Link 字段实时自动补全;全局搜索(frappe.utils.global_search)跨 DocType 搜索,约 15 分钟同步;FullTextSearch(frappe.search.full_text_search)基于 Whoosh,用于网站;SQLiteSearch(v15+,frappe.search.sqlite_search)基于 FTS5,支持评分与拼写纠正,约 5 分钟队列更新。
主要能力:链接搜索按 name、title_field、search_fields 匹配,前缀匹配优先,自动遵循字段启用状态;全局搜索通过 in_global_search=1 标记字段,使用数据库原生全文(MariaDB MATCH...AGAINST、PostgreSQL TSVECTOR),结果按权限过滤;SQLiteSearch 支持拼写纠正、时间衰减加权(24h 1.8x 至 90d 1.1x)、可恢复索引与自动调度。
使用方式:在 DocType 中设置 search_fields、title_field、show_title_field_in_link;自定义链接查询用 standard_queries 钩子并加 @frappe.whitelist();字段级过滤用 frm.set_query;重建索引用 rebuild_for_doctype 或 rebuild;SQLiteSearch 需继承 SQLiteSearch 类、定义 INDEX_SCHEMA 与 INDEXABLE_DOCTYPES、实现 get_search_filters,并在 hooks.py 注册 sqlite_search。
适用场景:需要用户友好名称搜索、跨 DocType 检索、网站全文搜索或自定义评分的 Frappe 应用。
限制与注意:全局搜索非实时;自定义查询缺少 @frappe.whitelist() 会静默失败;搜索须用参数化查询防注入;避免索引全部字段或已取消/删除文档;SQLiteSearch 必须实现权限过滤。v15+ 新增链接搜索缓存、link_fieldname 参数、page_length 默认 10(v14 为 20)等差异。具体版本行为以官方文档为准。