当前位置: 首页 > ops >正文

[n8n] 全文检索(FTS)集成 | Mermaid图表生成

第5章:全文检索(FTS)集成

在前一章中,我们构建了REST API服务作为数据访问入口。

本章将介绍全文检索(FTS)集成,它如同智能搜索引擎,为工作流系统提供高效灵活的检索能力。

核心架构

前文传送:

技术选型

  • SQLite FTS5:轻量级全文检索引擎
  • 虚拟表技术:创建专用索引表workflows_fts
  • 自动同步机制:通过触发器保持数据一致性

功能特性

特性实现原理应用场景示例
模糊匹配通配符查询(term*)输入"auto"匹配"automation"
多字段联合检索索引name/description等字段在名称和描述中搜索关键词
结果相关性排序BM25算法计算匹配度更相关的结果排在前面
实时同步INSERT/DELETE/UPDATE触发器数据变更后立即生效

实现细节

1. FTS表创建

-- 创建虚拟表用于全文检索
CREATE VIRTUAL TABLE workflows_fts USING fts5(filename UNINDEXED,    -- 仅存储不索引name,                  -- 工作流名称description,           -- 描述文本integrations,          -- 集成服务列表tags,                  -- 标签组content='workflows',   -- 关联主表content_rowid='id'      -- 关联字段
);

2. 自动同步触发器

-- 新增数据同步
CREATE TRIGGER workflows_ai AFTER INSERT ON workflows BEGININSERT INTO workflows_fts(rowid, name, description, integrations, tags)VALUES (new.id, new.name, new.description, new.integrations, new.tags);
END;-- 删除数据同步
CREATE TRIGGER workflows_ad AFTER DELETE ON workflows BEGINDELETE FROM workflows_fts WHERE rowid = old.id;
END;

3. 检索逻辑优化

def build_fts_query(raw_query: str) -> str:"""构造FTS查询语句"""terms = [f"{term.strip()}*" for term in raw_query.split() if term.strip()]return " AND ".join(terms)  # 转换为"term1* AND term2*"格式

接口增强

1. 搜索端点升级

app.get('/api/workflows', async (req, res) => {const { q, trigger, page = 1 } = req.query;// 构造FTS查询条件const ftsCondition = q ? `AND rowid IN (SELECT rowid FROM workflows_fts WHERE workflows_fts MATCH '${buildFTSQuery(q)}'ORDER BY rank)` : '';const results = await db.query(`SELECT * FROM workflowsWHERE 1=1 ${ftsCondition}LIMIT 20 OFFSET ${(page-1)*20}`);res.json(results);
});

2. 结果排序优化

-- 按相关性排序的查询示例
SELECT w.* 
FROM workflows w
JOIN workflows_fts fts ON w.id = fts.rowid
WHERE workflows_fts MATCH 'email* automation*'
ORDER BY rank;

性能对比

检索方式10万条数据平均耗时支持特性
传统LIKE查询1200ms基础模糊匹配
FTS5检索35ms模糊匹配+相关性排序

总结

全文检索集成通过:

  1. 专用索引表实现毫秒级响应
  2. 智能的模糊匹配算法
  3. 自动化的数据同步
  4. 精准的相关性排序

为工作流管理系统提供专业级搜索体验。下一章将介绍可视化功能:Mermaid图表生成


第6章:Mermaid图表生成

在前一章中,我们实现了全文检索功能。本章将介绍Mermaid图表生成功能,它如同智能绘图仪,将复杂的工作流JSON转换为可视化流程图。

核心架构

技术选型

  • Mermaid.js:基于文本的图表生成库
  • 语法转换引擎:将n8n节点转换为Mermaid语法
  • 响应式渲染:支持实时预览和动态更新

功能特性

特性实现原理应用场景
自动布局基于graph TD的拓扑排序避免手动调整节点位置
智能标签融合节点名称和类型快速识别节点功能
多级连接解析connections嵌套结构准确呈现复杂工作流
错误容忍自动跳过无效节点保证生成过程稳定性

实现细节

1. 核心转换函数

function generateMermaidDiagram(nodes, connections) {let diagram = 'graph TD\n';// 节点生成nodes.forEach(node => {const safeId = node.id.replace(/[^a-zA-Z0-9]/g, '_');diagram += `    ${safeId}["${node.name}\\n(${node.type})"]\n`;});// 连接生成Object.entries(connections).forEach(([source, outputs]) => {outputs.forEach(output => {output.forEach(conn => {diagram += `    ${source} --> ${conn.node}\n`;});});});return diagram;
}

2. 端点实现

app.get('/api/workflows/:id/diagram', async (req, res) => {const workflow = await db.getWorkflow(req.params.id);if (!workflow) return res.status(404).send('Workflow not found');const diagram = generateMermaidDiagram(workflow.nodes,workflow.connections);res.json({ diagram });
});

3. 安全处理

function sanitizeMermaidText(text) {return text.replace(/</g, '&lt;')  // 防XSS.replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}

使用示例

请求示例

curl http://localhost:8000/api/workflows/order_processing/diagram

响应示例

{"diagram": "graph TD\n    Webhook[\"订单Webhook\\n(webhook)\"]\n    Validate[\"验证数据\\n(function)\"]\n    DB[\"写入数据库\\n(postgres)\"]\n    Webhook --> Validate\n    Validate --> DB"
}

渲染效果

性能优化

  1. 缓存机制:对已生成的图表进行MD5缓存
  2. 批量处理:支持多个工作流同时转换
  3. 懒加载:仅在请求时生成图表
  4. 增量更新:监听工作流变更事件

总结

Mermaid图表生成通过:

  1. 自动化转换技术
  2. 清晰的视觉呈现
  3. 标准化的输出格式
  4. 便捷的集成方式

为工作流管理系统提供了强大的可视化能力。本系列教程至此已完成全部核心功能的讲解

END ★,°:.☆( ̄▽ ̄)/.°★* 。

http://www.xdnf.cn/news/18889.html

相关文章:

  • Android 使用MediaMuxer+MediaCodec编码MP4视频
  • 辅助驾驶出海、具身智能落地,稀缺的3D数据从哪里来?
  • 介绍智慧城管十大核心功能之一:风险预警系统
  • 架构评审:构建稳定、高效、可扩展的技术架构(下)
  • Java8-21的核心特性以及用法
  • 揭开.NET Core 中 ToList () 与 ToArray () 的面纱:从原理到抉择
  • ⸢ 贰 ⸥ ⤳ 安全架构:数字银行安全体系规划
  • 上海控安:GB 44495-2024《汽车整车信息安全技术要求》标准解读和测试方案
  • 修改win11任务栏时间字体和小图标颜色
  • vue实现表格轮播
  • 力扣18:四数之和
  • Python 实现冒泡排序:从原理到代码
  • PDFMathTranslate:让科学PDF翻译不再难——技术原理与实践指南
  • 2024中山大学研保研上机真题
  • (附源码)基于Spring Boot公务员考试信息管理系统设计与实现
  • 2025年渗透测试面试题总结-36(题目+回答)
  • 数据结构Java--8
  • Linux基础优化(Ubuntu、Kylin)
  • vue2实现背景颜色渐变
  • Java基础 8.27
  • 神经网络|(十六)概率论基础知识-伽马函数·上
  • Linux系统性能优化全攻略:从CPU到网络的全方位监控与诊断
  • 软考-系统架构设计师 业务处理系统(TPS)详细讲解
  • Python异步编程:从理论到实战的完整指南
  • 集成电路学习:什么是SSD单发多框检测器
  • 20250827的学习笔记
  • # 快递单号查询系统:一个现代化的物流跟踪解决方案
  • [后端快速搭建]基于 Django+DeepSeek API 快速搭建智能问答后端
  • PyTorch闪电入门:张量操作与自动微分实战
  • 济南大学杨波与济南青盟信息技术有限公司杨华伟