搜索配置
本页是搜索功能的配置参考:三套搜索引擎(本地 / Algolia / Pagefind)各自的配置项、默认引擎的选取与切换,以及多语言结果过滤与统一高亮。使用步骤(打开弹窗、快捷键)见布局与搜索。
配置权威源为
userConfig/_config.tmp.yml的search段,构建时注入主题配置。
1. 三引擎概览
| 引擎 | 配置键 | 索引位置 |
|---|---|---|
| 本地 | search.local | /search.json(主题生成器生成) |
| Algolia | search.algolia | 远端索引(构建时推送) |
| Pagefind | search.pagefind | public/pagefind/(构建后扫描生成) |
2. 默认引擎与切换
search.default:取值local/algolia/pagefind,指定默认引擎。- 生效顺序:
localStorage['search_engine']记忆 →search.default→ Algolia → 第一个已启用引擎。 - 若默认引擎
enable: false,自动降级到第一个已启用引擎并打警告日志。 - 切换入口:搜索弹窗内的引擎下拉(
#searchEngineMenu,项data-engine=local|algolia|pagefind);切换会destroy旧引擎并init新引擎,选择写入localStorage。
3. 本地搜索 search.local
| 键 | 说明 |
|---|---|
enable | 总开关 |
path | 索引输出路径,默认 /search.json |
field | 搜索范围:post / page / wiki / all,或数组组合 |
content | 是否索引正文(false 仅标题) |
format | striptags(去 HTML 标签)或 raw |
trigger | auto(输入即搜)或 manual(回车/按钮) |
top_n_per_article | 每篇最多命中片段数,-1 为全部 |
unescape / preload | 预留项,当前实现未接入 |
4. Algolia search.algolia
enable/applicationID/apiKey/indexName:开关与凭据(前端搜索凭据可安全暴露)。content_length:正文纯文本截断字符数;excerpt_length:摘要截断字符数。batch_size:推送批大小;hits.per_page:每页结果数。labels.*:input_placeholder/hits_empty/hits_stats。- 写入凭据与前端分离:构建推送用
deploy.algolia_write_key,不注入前端。
5. Pagefind search.pagefind
enable:总开关。output_subdir:索引子目录(相对public/),默认pagefind。- 构建步骤:
hexo generate之后、部署之前执行npx pagefind --site public --output-subdir pagefind。 - 加密文章通过
data-pagefind-body条件渲染自动排除。
6. 多语言与高亮
- 结果过滤:
search.js的applyLangFilter→groupAndFilter,按路径语言前缀分组。 - 语言偏好:读取
localStorage['wiki_lang'],非法值回落到默认语言。 - 展示优先级:偏好语言 → 默认语言 → 首条。
- 高亮:三引擎共用
SearchEngine._highlight,命中词加<mark>并做 HTML 转义(XSS 防护)。