Repository navigation
Search
pollybird edited this page Sep 9, 2026
·
2 revisions
前台 /search 优先走索引,故障或零命中时自动回退 SQL LIKE。
| 后端 | 依赖 | 适用 | 默认 |
|---|---|---|---|
| Whoosh + jieba | 纯 Python | 中小站点,零外部服务 | ✅ |
| Meilisearch | 独立进程 | 文章 > 5 万的大型站点 | 可选 |
| SQL LIKE | 无 | 索引未建、故障或零命中兜底 | 自动 |
- 索引范围:文章(标题 + 正文去 HTML + 摘要 + 栏目名)+ 插件内容(产品、招聘岗位,v2.5.2)
- 自动更新:文章与插件内容保存/删除时通过钩子触发,独立于缓存开关
- 重建索引:后台「搜索设置」一键重建,未索引前自动回退 SQL LIKE
-
索引位置:
instance/search_index/<locale>/(按语言分目录)
6 套主题搜索模板均支持分页与关键词高亮(
|highlight(keyword)|safe)。
开启内容级多语言后,搜索按当前语言检索对应语言的内容,三个后端均已适配:
-
Whoosh:按语言分索引目录
instance/search_index/<locale>/;Meilisearch:按语言分索引zhycms_articles_<locale> - 每篇内容对每种语言写入一份索引,内容经
t_field解析——有翻译用翻译、无翻译回退默认语言(未翻译内容不会因切语言而搜不到) - 搜索结果的标题、摘要、栏目名均随当前语言显示;前台
/search按?lang=xx/ session 自动选索引 - 该语言索引尚未建立时自动回退默认语言索引;i18n 关闭时仅维护默认语言单一索引,行为不变
-
插件内容同样本地化检索(v2.5.2):产品的规格参数、岗位的部门/工作地点/薪资待遇均按语言索引与兜底匹配(如英文搜
Model、Shanghai可命中)
升级到 v2.5.1 后,到后台「系统设置 → 搜索设置」点击一次**「重建索引」**即可生成各语言索引;内容保存/删除会自动同步全部语言索引,无需手动维护。
插件通过 get_search_provider() 钩子返回一个 SearchProvider 实例,自有内容即可进入全站搜索(官方「产品展示」「招聘管理」已接入)。协议五要素:
| 成员 | 职责 |
|---|---|
type |
内容类型标识(全局唯一,如 product / recruit_job),与 id 组成索引唯一键 uid = "类型:id"
|
iter_docs(locale) |
重建索引时产出该语言下全部可见文档 |
get_doc(id, locale) |
单条文档(保存时实时索引);返回 None 表示下架/删除,核心自动移出索引 |
sql_search(kw, locale, page, per_page) |
SQL LIKE 兜底检索(索引故障/未建/零命中时),需自行匹配翻译表 |
build_url(item) |
搜索结果 → 详情页 URL(伪静态两种模式),核心统一分发 |
完整示例见「插件开发指南 → 全站搜索贡献」。文档以
uid区分类型,文章与产品/岗位互不覆盖;插件禁用时核心回调on_disabled()清理索引残留。产品/岗位保存、删除、批量上下架均实时同步索引。