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

[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.dtcms.com/a/354557.html

相关文章:

  • 基于django的梧桐山水智慧旅游平台设计与开发(代码+数据库+LW)
  • [p2p-Magnet] docs | HTTP API与Web界面 | 搜索查询引擎
  • OpenAI重组受阻:微软“锁链”与生态博弈
  • [p2p-Magnet] 数据模型(GORM) | DHT爬虫 | 分类器
  • 华为云OBS+HMS+EMRonEC2+HiveSparkFlink+GaussDB
  • GaussDB 修改schema属主时报:must be member of role “dtest“
  • 架构设计模式七大原则
  • 如何将iPhone上的隐藏照片传输到电脑
  • 零基础开发应用:cpolar+Appsmith平民化方案
  • AbpVnext 阿里云ssl证书多个生产环境自动更新
  • 观远BI仪表板智能洞察场景实战:如何破解门店销售、渠道转化与经营分析难题
  • 用React写一个技能冷却的案例,关于节流
  • C++《哈希表》
  • Day16_【机器学习常见术语】
  • Qt自定义聊天消息控件ChatMessage:初步实现仿微信聊天界面
  • Python 数据分析学习笔记:Pandas 逻辑运算
  • 97、23种设计模式之桥接模式(6/23)
  • 鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(四)
  • attention is all u need
  • npm install --global @dcloudio/uni-cli 时安装失败
  • 【lucene】如何评测一款分析器Analyzer
  • CP1-1-用户管理MyUser
  • jQuery 从入门到实践:基础语法、事件与元素操作全解析
  • 通过vs code配置spring boot+maven项目
  • vxetable数据导出
  • GaussDB 数据库架构师修炼(十八) SQL执行引擎-概述
  • 【爬虫】通过模拟鼠标点击和键盘操作抓取网页数据
  • 算法 --- 二分
  • 【深度学习新浪潮】显著性检测最新研究进展(2022-2025)
  • LeetCode 刷题【55. 跳跃游戏】