670 lines
16 KiB
Markdown
670 lines
16 KiB
Markdown
|
|
# N8N HTML 文档项目
|
|||
|
|
|
|||
|
|
这是一个基于MkDocs和Material主题构建的n8n工作流自动化指南项目。
|
|||
|
|
|
|||
|
|
## 📚 项目概述
|
|||
|
|
|
|||
|
|
### 目标
|
|||
|
|
将n8n指南内容改造为一个美观且用户友好的HTML界面,提供完整的学习路径和实践指导。
|
|||
|
|
|
|||
|
|
### 特色
|
|||
|
|
- 🎨 **美观界面**: 采用Material Design,深蓝+灰色专业配色
|
|||
|
|
- 📱 **响应式设计**: 完美适配桌面、平板、手机
|
|||
|
|
- 🔍 **强大搜索**: 中文搜索支持,快速定位内容
|
|||
|
|
- 🌓 **主题切换**: 支持明暗两种主题模式
|
|||
|
|
- 📊 **丰富组件**: 统计卡片、特性网格、流程图等
|
|||
|
|
|
|||
|
|
## 🗂️ 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
n8n_html/
|
|||
|
|
├── README.md # 项目说明文件
|
|||
|
|
└── n8n/ # MkDocs项目目录
|
|||
|
|
├── mkdocs.yml # MkDocs配置文件
|
|||
|
|
└── docs/ # 文档内容目录
|
|||
|
|
├── index.md # 首页
|
|||
|
|
├── stylesheets/ # 自定义CSS样式
|
|||
|
|
│ └── extra.css
|
|||
|
|
├── introduction/ # 引言部分
|
|||
|
|
│ ├── background.md
|
|||
|
|
│ ├── target-audience.md
|
|||
|
|
│ ├── purpose-value.md
|
|||
|
|
│ └── why-n8n.md
|
|||
|
|
├── installation/ # 安装与配置
|
|||
|
|
│ ├── quick-start.md
|
|||
|
|
│ ├── local-deployment.md
|
|||
|
|
│ ├── interface.md
|
|||
|
|
│ ├── credentials.md
|
|||
|
|
│ └── localization.md
|
|||
|
|
├── learning/ # 学习与使用
|
|||
|
|
│ ├── common-nodes.md
|
|||
|
|
│ └── basic-workflows.md
|
|||
|
|
├── reference/ # 参考资料
|
|||
|
|
│ ├── resources.md
|
|||
|
|
│ └── glossary.md
|
|||
|
|
└── ai-center/ # AI卓越中心
|
|||
|
|
├── functions.md
|
|||
|
|
└── join.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
### 方法一:安装依赖(推荐)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装Python和pip(如果未安装)
|
|||
|
|
# Windows: 下载Python安装包
|
|||
|
|
# Mac: brew install python
|
|||
|
|
# Linux: apt-get install python3 python3-pip
|
|||
|
|
|
|||
|
|
# 安装MkDocs和Material主题
|
|||
|
|
pip install mkdocs
|
|||
|
|
pip install mkdocs-material
|
|||
|
|
|
|||
|
|
# 进入项目目录
|
|||
|
|
cd n8n
|
|||
|
|
|
|||
|
|
# 启动开发服务器
|
|||
|
|
mkdocs serve
|
|||
|
|
|
|||
|
|
# 访问 http://127.0.0.1:8000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法二:使用Docker
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 进入项目目录
|
|||
|
|
cd n8n
|
|||
|
|
|
|||
|
|
# 使用Docker运行
|
|||
|
|
docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-material
|
|||
|
|
|
|||
|
|
# 访问 http://127.0.0.1:8000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法三:在线预览
|
|||
|
|
|
|||
|
|
如果遇到端口冲突,可以指定其他端口:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用端口8001
|
|||
|
|
mkdocs serve -a 127.0.0.1:8001
|
|||
|
|
|
|||
|
|
# 使用端口8080
|
|||
|
|
mkdocs serve -a 127.0.0.1:8080
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎨 设计特色
|
|||
|
|
|
|||
|
|
### 视觉设计
|
|||
|
|
- **主色调**: 深蓝色 (#37474f) + 靛蓝色 (#3f51b5)
|
|||
|
|
- **背景**: 科技感渐变背景
|
|||
|
|
- **字体**: Arial/Helvetica 确保清晰度
|
|||
|
|
- **图标**: Material Design Icons
|
|||
|
|
|
|||
|
|
### 用户体验
|
|||
|
|
- **导航系统**: 顶部标签 + 左侧树形导航
|
|||
|
|
- **搜索功能**: 实时中文搜索
|
|||
|
|
- **内容组织**: 标签页、折叠面板、统计卡片
|
|||
|
|
- **代码高亮**: 语法高亮 + 复制按钮
|
|||
|
|
|
|||
|
|
### 交互功能
|
|||
|
|
- **动画效果**: 悬停动画、淡入效果
|
|||
|
|
- **响应式布局**: 自适应不同屏幕尺寸
|
|||
|
|
- **快捷键支持**: 常用操作快捷键
|
|||
|
|
- **打印友好**: 优化的打印样式
|
|||
|
|
|
|||
|
|
## 📖 内容组织
|
|||
|
|
|
|||
|
|
### 文档结构
|
|||
|
|
1. **引言**: 背景、目标读者、价值、选择理由
|
|||
|
|
2. **安装配置**: 快速开始、本地部署、界面、凭证、汉化
|
|||
|
|
3. **学习使用**: 常用节点、基本工作流、避坑指南、进阶应用
|
|||
|
|
4. **参考资料**: 学习资源、术语表
|
|||
|
|
5. **AI卓越中心**: 服务介绍、加入方式
|
|||
|
|
|
|||
|
|
### 内容特色
|
|||
|
|
- **循序渐进**: 从基础到高级的学习路径
|
|||
|
|
- **图文并茂**: 流程图、架构图、截图说明
|
|||
|
|
- **实战导向**: 真实案例和项目实践
|
|||
|
|
- **社区驱动**: 问题解答和经验分享
|
|||
|
|
|
|||
|
|
## 🛠️ 技术实现
|
|||
|
|
|
|||
|
|
### 基础技术栈
|
|||
|
|
- **MkDocs**: 静态站点生成器
|
|||
|
|
- **Material主题**: Google Material Design
|
|||
|
|
- **Markdown**: 内容编写格式
|
|||
|
|
- **Python**: 构建工具依赖
|
|||
|
|
|
|||
|
|
### 扩展功能
|
|||
|
|
- **搜索插件**: 中文搜索支持
|
|||
|
|
- **代码高亮**: Pygments语法高亮
|
|||
|
|
- **图表支持**: Mermaid流程图
|
|||
|
|
- **数学公式**: MathJax支持
|
|||
|
|
- **选项卡**: 内容分组展示
|
|||
|
|
|
|||
|
|
### 自定义样式
|
|||
|
|
- **CSS网格**: 特性卡片布局
|
|||
|
|
- **Flexbox**: 响应式布局
|
|||
|
|
- **CSS变量**: 主题色彩管理
|
|||
|
|
- **媒体查询**: 移动端适配
|
|||
|
|
|
|||
|
|
## 📱 移动端适配
|
|||
|
|
|
|||
|
|
### 响应式断点
|
|||
|
|
- **大屏 (>1920px)**: 完整布局,最佳体验
|
|||
|
|
- **标准 (1366-1920px)**: 标准桌面体验
|
|||
|
|
- **平板 (768-1366px)**: 折叠侧栏,核心功能保留
|
|||
|
|
- **手机 (<768px)**: 移动优化,单列布局
|
|||
|
|
|
|||
|
|
### 移动端优化
|
|||
|
|
- **触摸友好**: 按钮大小适合手指操作
|
|||
|
|
- **滑动导航**: 左右滑动切换章节
|
|||
|
|
- **快速加载**: 优化图片和资源大小
|
|||
|
|
- **离线阅读**: 支持离线缓存
|
|||
|
|
|
|||
|
|
## 🔧 构建和部署
|
|||
|
|
|
|||
|
|
### 本地开发
|
|||
|
|
```bash
|
|||
|
|
# 实时预览(开发模式)
|
|||
|
|
mkdocs serve
|
|||
|
|
|
|||
|
|
# 构建静态文件
|
|||
|
|
mkdocs build
|
|||
|
|
|
|||
|
|
# 输出目录:site/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 生产部署
|
|||
|
|
```bash
|
|||
|
|
# 构建生产版本
|
|||
|
|
mkdocs build
|
|||
|
|
|
|||
|
|
# 部署到GitHub Pages
|
|||
|
|
mkdocs gh-deploy
|
|||
|
|
|
|||
|
|
# 部署到自定义服务器
|
|||
|
|
# 将site/目录内容上传到Web服务器
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 持续集成
|
|||
|
|
可以配置GitHub Actions自动构建和部署:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# .github/workflows/ci.yml
|
|||
|
|
name: ci
|
|||
|
|
on:
|
|||
|
|
push:
|
|||
|
|
branches:
|
|||
|
|
- master
|
|||
|
|
jobs:
|
|||
|
|
deploy:
|
|||
|
|
runs-on: ubuntu-latest
|
|||
|
|
steps:
|
|||
|
|
- uses: actions/checkout@v2
|
|||
|
|
- uses: actions/setup-python@v2
|
|||
|
|
with:
|
|||
|
|
python-version: 3.x
|
|||
|
|
- run: pip install mkdocs-material
|
|||
|
|
- run: mkdocs gh-deploy --force
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 使用指南
|
|||
|
|
|
|||
|
|
### 编辑内容
|
|||
|
|
1. 修改 `docs/` 目录下的Markdown文件
|
|||
|
|
2. 图片放置在 `docs/assets/` 目录
|
|||
|
|
3. 运行 `mkdocs serve` 预览更改
|
|||
|
|
4. 提交更改并推送到仓库
|
|||
|
|
|
|||
|
|
### 添加新页面
|
|||
|
|
1. 在相应目录下创建新的 `.md` 文件
|
|||
|
|
2. 在 `mkdocs.yml` 的 `nav` 部分添加导航项
|
|||
|
|
3. 更新相关页面的链接
|
|||
|
|
|
|||
|
|
### 自定义样式
|
|||
|
|
1. 编辑 `docs/stylesheets/extra.css`
|
|||
|
|
2. 添加新的CSS类和样式
|
|||
|
|
3. 在Markdown中使用HTML和CSS类
|
|||
|
|
|
|||
|
|
## 🐛 常见问题
|
|||
|
|
|
|||
|
|
### 构建问题
|
|||
|
|
**问题**: `mkdocs serve` 端口被占用
|
|||
|
|
**解决**: 使用 `mkdocs serve -a 127.0.0.1:8001` 指定其他端口
|
|||
|
|
|
|||
|
|
**问题**: Material主题样式不生效
|
|||
|
|
**解决**: 确认已安装 `mkdocs-material` 包
|
|||
|
|
|
|||
|
|
### 内容问题
|
|||
|
|
**问题**: 中文搜索不工作
|
|||
|
|
**解决**: 确认配置中包含 `lang: zh` 设置
|
|||
|
|
|
|||
|
|
**问题**: 图片不显示
|
|||
|
|
**解决**: 检查图片路径,确保相对路径正确
|
|||
|
|
|
|||
|
|
## 📞 支持和反馈
|
|||
|
|
|
|||
|
|
### 技术支持
|
|||
|
|
- **GitHub Issues**: 报告Bug和功能请求
|
|||
|
|
- **讨论区**: 使用问题和建议讨论
|
|||
|
|
- **社区群**: 加入微信/QQ群获得帮助
|
|||
|
|
|
|||
|
|
### 贡献指南
|
|||
|
|
1. Fork项目仓库
|
|||
|
|
2. 创建功能分支
|
|||
|
|
3. 提交更改
|
|||
|
|
4. 发起Pull Request
|
|||
|
|
5. 代码审查和合并
|
|||
|
|
|
|||
|
|
## 📄 许可证
|
|||
|
|
|
|||
|
|
本项目采用 MIT 许可证开源,详见 LICENSE 文件。
|
|||
|
|
|
|||
|
|
## 🙏 致谢
|
|||
|
|
|
|||
|
|
感谢所有为n8n开源社区做出贡献的开发者和用户!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**开始您的n8n学习之旅吧!** 🚀
|
|||
|
|
|
|||
|
|
很好的问题!让我详细解释n8n指南网站中文搜索支持的技术原理和实现方式。
|
|||
|
|
|
|||
|
|
[1 tool called]
|
|||
|
|
|
|||
|
|
## 🔍 中文搜索技术原理详解
|
|||
|
|
|
|||
|
|
### 1. 基础配置原理
|
|||
|
|
|
|||
|
|
在我们的项目中,中文搜索主要通过以下配置实现:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# mkdocs.yml 中的搜索配置
|
|||
|
|
plugins:
|
|||
|
|
- search:
|
|||
|
|
lang: zh # 指定中文语言支持
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 技术架构层次
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph TD
|
|||
|
|
A[用户输入中文查询] --> B[前端搜索接口]
|
|||
|
|
B --> C[Lunr.js搜索引擎]
|
|||
|
|
C --> D[中文分词器]
|
|||
|
|
D --> E[索引匹配]
|
|||
|
|
E --> F[结果排序]
|
|||
|
|
F --> G[高亮显示]
|
|||
|
|
|
|||
|
|
subgraph "预处理阶段"
|
|||
|
|
H[Markdown文档] --> I[内容提取]
|
|||
|
|
I --> J[中文分词]
|
|||
|
|
J --> K[索引构建]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
K --> C
|
|||
|
|
|
|||
|
|
style D fill:#e3f2fd
|
|||
|
|
style J fill:#e8f5e8
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 核心技术组件
|
|||
|
|
|
|||
|
|
#### 3.1 Lunr.js 搜索引擎
|
|||
|
|
|
|||
|
|
**Lunr.js** 是 MkDocs-Material 内置的客户端搜索引擎:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// Lunr.js 中文搜索配置原理
|
|||
|
|
lunr(function () {
|
|||
|
|
// 中文语言支持
|
|||
|
|
this.use(lunr.zh);
|
|||
|
|
|
|||
|
|
// 字段权重配置
|
|||
|
|
this.field('title', { boost: 10 }); // 标题权重最高
|
|||
|
|
this.field('text', { boost: 1 }); // 内容权重标准
|
|||
|
|
this.field('tags', { boost: 5 }); // 标签权重较高
|
|||
|
|
|
|||
|
|
// 中文分词处理
|
|||
|
|
this.pipeline.add(
|
|||
|
|
lunr.trimmer,
|
|||
|
|
lunr.stopWordFilter,
|
|||
|
|
lunr.stemmer,
|
|||
|
|
lunr.zh.trimmer, // 中文修剪器
|
|||
|
|
lunr.zh.stopWordFilter, // 中文停止词过滤
|
|||
|
|
lunr.zh.stemmer // 中文词干提取
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// 文档索引
|
|||
|
|
documents.forEach(function(doc) {
|
|||
|
|
this.add(doc);
|
|||
|
|
}, this);
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3.2 中文分词处理
|
|||
|
|
|
|||
|
|
**分词算法**:
|
|||
|
|
```javascript
|
|||
|
|
// 中文分词示例
|
|||
|
|
const chineseText = "n8n工作流自动化平台";
|
|||
|
|
|
|||
|
|
// 基础分词结果
|
|||
|
|
const tokens = [
|
|||
|
|
"n8n", "工作流", "工作", "流",
|
|||
|
|
"自动化", "自动", "化", "平台"
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// 权重计算
|
|||
|
|
const weightedTokens = {
|
|||
|
|
"n8n": 1.0,
|
|||
|
|
"工作流": 0.9,
|
|||
|
|
"自动化": 0.9,
|
|||
|
|
"平台": 0.8,
|
|||
|
|
"工作": 0.6,
|
|||
|
|
"流": 0.3,
|
|||
|
|
"自动": 0.5,
|
|||
|
|
"化": 0.3
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3.3 索引构建过程
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 文档索引构建
|
|||
|
|
const documentProcessor = {
|
|||
|
|
// 1. 内容提取
|
|||
|
|
extractContent: function(markdown) {
|
|||
|
|
const content = {
|
|||
|
|
title: extractTitle(markdown),
|
|||
|
|
headings: extractHeadings(markdown),
|
|||
|
|
text: extractPlainText(markdown),
|
|||
|
|
tags: extractTags(markdown)
|
|||
|
|
};
|
|||
|
|
return content;
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 2. 中文预处理
|
|||
|
|
preprocessChinese: function(text) {
|
|||
|
|
return text
|
|||
|
|
.replace(/[,。!?;:""''()【】]/g, ' ') // 替换标点
|
|||
|
|
.replace(/\s+/g, ' ') // 合并空格
|
|||
|
|
.trim(); // 去除首尾空格
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 3. 构建搜索索引
|
|||
|
|
buildIndex: function(documents) {
|
|||
|
|
const index = lunr(function() {
|
|||
|
|
this.use(lunr.zh);
|
|||
|
|
this.ref('id');
|
|||
|
|
this.field('title', { boost: 10 });
|
|||
|
|
this.field('text');
|
|||
|
|
|
|||
|
|
documents.forEach(doc => {
|
|||
|
|
this.add({
|
|||
|
|
id: doc.id,
|
|||
|
|
title: this.preprocessChinese(doc.title),
|
|||
|
|
text: this.preprocessChinese(doc.text)
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return index;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 搜索流程详解
|
|||
|
|
|
|||
|
|
#### 4.1 实时搜索处理
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 前端搜索实现
|
|||
|
|
class ChineseSearch {
|
|||
|
|
constructor(index, documents) {
|
|||
|
|
this.index = index;
|
|||
|
|
this.documents = documents;
|
|||
|
|
this.minQueryLength = 1; // 中文最小查询长度
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
search(query) {
|
|||
|
|
if (query.length < this.minQueryLength) {
|
|||
|
|
return [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 中文查询预处理
|
|||
|
|
const processedQuery = this.preprocessQuery(query);
|
|||
|
|
|
|||
|
|
// 执行搜索
|
|||
|
|
const results = this.index.search(processedQuery);
|
|||
|
|
|
|||
|
|
// 结果后处理
|
|||
|
|
return this.postprocessResults(results, query);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
preprocessQuery(query) {
|
|||
|
|
// 中文查询增强
|
|||
|
|
const enhanced = query
|
|||
|
|
.split('')
|
|||
|
|
.map(char => {
|
|||
|
|
if (/[\u4e00-\u9fff]/.test(char)) {
|
|||
|
|
// 中文字符模糊匹配
|
|||
|
|
return `${char}* ${char}~1`;
|
|||
|
|
}
|
|||
|
|
return char;
|
|||
|
|
})
|
|||
|
|
.join(' ');
|
|||
|
|
|
|||
|
|
return enhanced;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
postprocessResults(results, originalQuery) {
|
|||
|
|
return results.map(result => {
|
|||
|
|
const doc = this.documents[result.ref];
|
|||
|
|
const highlights = this.generateHighlights(doc, originalQuery);
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
...result,
|
|||
|
|
document: doc,
|
|||
|
|
highlights: highlights
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4.2 高亮显示算法
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 中文文本高亮
|
|||
|
|
function highlightChinese(text, query) {
|
|||
|
|
const queryChars = query.split('');
|
|||
|
|
let highlightedText = text;
|
|||
|
|
|
|||
|
|
queryChars.forEach(char => {
|
|||
|
|
if (/[\u4e00-\u9fff]/.test(char)) {
|
|||
|
|
const regex = new RegExp(char, 'gi');
|
|||
|
|
highlightedText = highlightedText.replace(
|
|||
|
|
regex,
|
|||
|
|
`<mark>${char}</mark>`
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return highlightedText;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 性能优化策略
|
|||
|
|
|
|||
|
|
#### 5.1 索引优化
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 索引大小优化
|
|||
|
|
const optimizedIndex = {
|
|||
|
|
// 停止词过滤
|
|||
|
|
stopWords: ['的', '了', '在', '是', '我', '有', '和', '就'],
|
|||
|
|
|
|||
|
|
// 词频阈值
|
|||
|
|
minTermFrequency: 2,
|
|||
|
|
|
|||
|
|
// 索引压缩
|
|||
|
|
compress: true,
|
|||
|
|
|
|||
|
|
// 字段选择性索引
|
|||
|
|
indexFields: {
|
|||
|
|
title: { weight: 10, store: true },
|
|||
|
|
content: { weight: 1, store: false },
|
|||
|
|
tags: { weight: 5, store: true }
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 5.2 搜索性能
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 搜索性能优化
|
|||
|
|
class SearchOptimizer {
|
|||
|
|
constructor() {
|
|||
|
|
this.cache = new Map();
|
|||
|
|
this.debounceDelay = 300; // 防抖延迟
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 结果缓存
|
|||
|
|
cachedSearch(query) {
|
|||
|
|
if (this.cache.has(query)) {
|
|||
|
|
return this.cache.get(query);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const results = this.performSearch(query);
|
|||
|
|
this.cache.set(query, results);
|
|||
|
|
|
|||
|
|
// 限制缓存大小
|
|||
|
|
if (this.cache.size > 100) {
|
|||
|
|
const firstKey = this.cache.keys().next().value;
|
|||
|
|
this.cache.delete(firstKey);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return results;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 防抖搜索
|
|||
|
|
debouncedSearch = debounce((query, callback) => {
|
|||
|
|
const results = this.cachedSearch(query);
|
|||
|
|
callback(results);
|
|||
|
|
}, this.debounceDelay);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. 中文搜索特殊处理
|
|||
|
|
|
|||
|
|
#### 6.1 字符编码处理
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// Unicode 中文字符范围
|
|||
|
|
const chineseRanges = {
|
|||
|
|
basic: /[\u4e00-\u9fff]/, // 基本中文字符
|
|||
|
|
punctuation: /[\u3000-\u303f]/, // 中文标点符号
|
|||
|
|
symbols: /[\uff00-\uffef]/, // 全角字符
|
|||
|
|
radicals: /[\u2e80-\u2eff]/, // 部首
|
|||
|
|
extensions: /[\u3400-\u4dbf]/ // 扩展A区
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
function isChineseChar(char) {
|
|||
|
|
return chineseRanges.basic.test(char) ||
|
|||
|
|
chineseRanges.extensions.test(char);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 6.2 拼音搜索支持
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 拼音搜索增强(可选)
|
|||
|
|
const pinyinMap = {
|
|||
|
|
'工': ['gong'],
|
|||
|
|
'作': ['zuo'],
|
|||
|
|
'流': ['liu'],
|
|||
|
|
'自': ['zi'],
|
|||
|
|
'动': ['dong'],
|
|||
|
|
'化': ['hua']
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
function addPinyinSupport(text) {
|
|||
|
|
return text.split('').map(char => {
|
|||
|
|
const pinyin = pinyinMap[char];
|
|||
|
|
return pinyin ? `${char} ${pinyin.join(' ')}` : char;
|
|||
|
|
}).join(' ');
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7. 配置文件完整实现
|
|||
|
|
|
|||
|
|
让我为您展示一个完整的中文搜索配置:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# 高级中文搜索配置
|
|||
|
|
plugins:
|
|||
|
|
- search:
|
|||
|
|
lang: zh
|
|||
|
|
separator: '[\s\-\.]+' # 分隔符正则
|
|||
|
|
indexing: 'full' # 全文索引
|
|||
|
|
prebuild_index: python # 预构建索引
|
|||
|
|
min_search_length: 1 # 最小搜索长度
|
|||
|
|
|
|||
|
|
# 中文优化的Markdown扩展
|
|||
|
|
markdown_extensions:
|
|||
|
|
- pymdownx.superfences # 代码块支持
|
|||
|
|
- attr_list # 属性列表
|
|||
|
|
- md_in_html # HTML中的Markdown
|
|||
|
|
|
|||
|
|
# 主题中文搜索配置
|
|||
|
|
theme:
|
|||
|
|
name: material
|
|||
|
|
language: zh
|
|||
|
|
features:
|
|||
|
|
- search.highlight # 搜索高亮
|
|||
|
|
- search.share # 搜索分享
|
|||
|
|
- search.suggest # 搜索建议
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 8. 测试搜索功能
|
|||
|
|
|
|||
|
|
您可以测试以下中文搜索场景:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动服务后测试这些搜索词
|
|||
|
|
搜索词示例:
|
|||
|
|
- "工作流" # 精确匹配
|
|||
|
|
- "n8n" # 英文关键词
|
|||
|
|
- "自动化" # 常用词汇
|
|||
|
|
- "安装" # 功能搜索
|
|||
|
|
- "AI代理" # 复合词
|
|||
|
|
- "避坑" # 俚语搜索
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9. 未来优化方向
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 可能的增强功能
|
|||
|
|
const futureEnhancements = {
|
|||
|
|
// 1. 智能联想
|
|||
|
|
smartSuggestion: true,
|
|||
|
|
|
|||
|
|
// 2. 语义搜索
|
|||
|
|
semanticSearch: true,
|
|||
|
|
|
|||
|
|
// 3. 搜索统计
|
|||
|
|
searchAnalytics: true,
|
|||
|
|
|
|||
|
|
// 4. 个性化搜索
|
|||
|
|
personalizedResults: true,
|
|||
|
|
|
|||
|
|
// 5. 多语言混合搜索
|
|||
|
|
multilingual: ['zh', 'en']
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这就是我们n8n指南网站中文搜索的完整技术实现!通过Lunr.js + 中文分词 + Material主题的组合,实现了高效准确的中文全文搜索功能。🔍
|