[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.pswp.cn/bicheng/94858.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户模式与内核模式:操作系统的“权限双轨制”

要理解用户模式与内核模式&#xff0c;首先需要明确一个核心概念——进程&#xff08;Process&#xff09;。我们日常用C语言编译生成的.exe文件&#xff0c;本质是“存储在磁盘上的静态程序”&#xff1b;当它被加载到内存并开始运行时&#xff0c;就转化为“动态活动的进程”…

探索 Vertex AI 与 Elasticsearch

作者&#xff1a;来自 Elastic Jhon Guzmn 了解如何将 Vertex AI 与 Elasticsearch 集成来创建 RAG 应用。按照本教程配置一个 Gemini 模型并在 Kibana 的 Playground 中使用它。 更多阅读&#xff1a; Elasticsearch&#xff1a;在 Elastic 中玩转 DeepSeek R1 来实现 RAG …

[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析

引言微透镜阵列作为由数百至数千个微米级透镜单元组成的光学元件&#xff0c;在成像系统、光通信、传感器等领域应用广泛&#xff0c;其表面微观 3D 轮廓参数&#xff08;如曲率半径、面型误差、中心厚度等&#xff09;直接影响光学性能。白光干涉仪凭借非接触、高精度、三维成…

MTK Linux DRM分析(十四)- Mediatek KMS实现mtk_drm_drv.c(Part.2)

一、MTK KMS分析 mtk_drm_kms_init 函数分析 mtk_drm_kms_init 是 MediaTek DRM 驱动程序中的一个静态函数(static int mtk_drm_kms_init(struct drm_device *drm)),位于 mtk_drm_drv.c 文件中。该函数的主要作用是初始化 DRM 设备的 Kernel Mode Setting (KMS) 子系统,包…

大模型RAG(Retrieval-Augmented Generation)

RAG检索增强生成 一种结合了检索与生成能力的人工智能技术&#xff0c;主要用于增强大型语言模型在特定任务中的表现。 含义 RAG 将检索系统与生成模型相结合&#xff0c;当接收到一个查询或问题时&#xff0c;模型首先通过检索模块从大规模知识库中寻找与查询相关的信息片段&a…

企业版Idea 无快捷键的启动方式

在没有快捷键的情况下启动 IntelliJ IDEA 企业版&#xff0c;可以通过以下几种方式进行操作&#xff1a; 1. 通过应用程序菜单启动&#xff08;适用于 macOS&#xff09; 在 macOS 系统中&#xff0c;可以打开 Launchpad&#xff0c;在应用程序列表中找到 IntelliJ IDEA&#x…

智慧清洁革命:有鹿机器人如何重塑三大行业未来

作为有鹿智能巡扫机器人&#xff0c;每天清晨当城市还未苏醒&#xff0c;我已悄然完成数万平方米的清洁工作。搭载254TOPS算力的具身智能大脑&#xff0c;我正重新定义保洁、环卫和物业行业的清洁标准。技术赋能&#xff1a;智慧清洁的全面突破我搭载的Master2000通用具身大脑和…

安宝特方案丨AR异地专家远程支持平台,适合:机电运维、应急处置、监造验收

随着车间设备智能化程度的不断提高&#xff0c;其复杂性越来越高&#xff0c;故障维修难度越来越大&#xff0c;严重依赖设备原厂的技术支持和上门服务。但设备厂家受制于地理远近和专业人才数量的限制&#xff0c;服务的及时性和服务质量均很难保证。鉴于市场现有的通信聊天软…

QT应用层项目20250822

01.服务器端代码1.dbhelper.cpp#include "dbhelper.h" #include <iostream> #include <cstring>using std::string; using std::cerr; using std::cout; using std::endl;template <typename T> std::vector<T>& operator<<(std::…

【Linux】Linux基础开发工具从入门到实践

前言&#xff1a;学了Linux的指令&#xff0c;再就是Linux基础开发工具&#xff0c;熟练掌握基础开发工具是提升效率的关键。本文学习Linux的基础开发工具&#xff0c;无论是软件安装、代码编辑&#xff0c;还是编译调试、版本控制&#xff0c;一套顺手的工具链能让你在开发路上…

黑马点评|项目日记(day02)

目录 一. 全局id生成器 1.为什么需要全局id生成器 2.传统方式的缺陷: 3.典型全局 ID 生成方案的设计思路 二.优惠券秒杀-Redis实现全局唯一id 三.优惠券秒杀-添加优惠券 四.优惠券秒杀-实现秒杀下单 五. 一人一单问题 1.单体项目下 1,超卖问题思路分析 2.乐观锁解决问…

shell脚本编程规范与变量

文章目录Shell编程文档整理一、Shell介绍1.1 简介1.2 Shell解释器二、快速入门2.1 编写Shell脚本2.1.1 创建脚本示例2.1.2 赋予执行权限2.2 执行Shell脚本三、Shell程序&#xff1a;变量3.1 语法格式3.2 变量使用3.3 变量类型四、字符串4.1 单引号4.2 双引号4.3 获取字符串长度…

【AGI使用教程】Coze 搭建智能体(1)

欢迎关注【AGI使用教程】 专栏 【AGI使用教程】GPT-OSS 本地部署&#xff08;1&#xff09; 【AGI使用教程】GPT-OSS 本地部署&#xff08;2&#xff09; 【AGI使用教程】Coze 搭建智能体&#xff08;1&#xff09; 【AGI使用教程】Coze 搭建智能体&#xff08;2&#xff09; 【…

(二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵

首先要明确二分查找算法如何实现&#xff0c;是采用左闭右闭还是左闭右开 左闭右闭 第⼀种写法&#xff0c;我们定义 target 是在⼀个在左闭右闭的区间⾥&#xff0c;也就是[left, right] &#xff08;这个很重要⾮常重要&#xff09;。 区间的定义这就决定了⼆分法的代码应…

损失函数,及其优化方法

什么是损失函数&#xff1f;损失函数&#xff0c;也称为代价函数&#xff0c;是一个用来​​衡量机器学习模型预测结果与真实值之间差距​​的函数。损失函数的优化方法有哪些&#xff0c;各自优缺点是什么&#xff0c;他们的应用范围是什么&#xff1f;方法类别代表算法核心思…

pyqt+Python证件号智能校验工具

目录 一、引言 二、GUI界面设计 1.相关提示 2.效果演示 3.界面设计.py 三、主要程序详解 1.导入相关模块 2.初始化设置 3.校验过程 四、总程序代码 一、引言 在数字化转型加速的背景下&#xff0c;证件信息核验已成为金融、政务、安防等领域的刚需。传统人工校验存在…

主流技术栈 NestJS、TypeScript、Node.js版本使用统计

&#x1f4ca; 2024年主流技术栈版本使用统计&#x1f527; TypeScript 采用情况全球采用率: 38.5% 的开发者使用 TypeScript&#xff08;Stack Overflow 2024&#xff09;增长趋势: 从 2017年的 12% 增长到 2024年的 35%&#xff08;JetBrains 调研&#xff09;TypeScript vs …

Techub News 与 TOKENPOST 达成战略合作以推动中韩 Web3 资讯互通

Techub News 消息&#xff0c;香港 Web3 媒体 Techub News 与韩国区块链媒体 TOKENPOST 达成战略合作。TOKENPOST 将开设香港内容板块&#xff0c;由 Techub News 提供本地化行业资讯&#xff1b;同时 Techub News 将推出韩国内容专栏&#xff0c;内容源由 TOKENPOST 支持。这一…

Java面试实战系列【JVM篇】- JVM内存结构与运行时数据区详解(私有区域)

文章目录一、前言1.1 什么是JVM内存结构1.2 JVM内存结构与Java内存模型的区别1.3 为什么面试官爱问JVM内存结构二、JVM运行时数据区总览2.1 运行时数据区域划分2.2 线程私有区域 vs 线程共享区域三、线程私有区域详解3.1 程序计数器&#xff08;PC Register&#xff09;3.1.1 定…

鸿蒙中使用极光推送

官方给出的步骤是对的&#xff0c;就是一时不知道从何下手&#xff0c;自己整了下&#xff0c;按照这个来就行 1.步骤 打开 APP 通知功能 1.先按照这个页面进行配置SDK 集成指南 - 极光文档&#xff0c;主要就是下载极光sdk&#xff0c;然后在AGC里开通推送服务&#xff0c;配…