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

用 C# 在 SonnetDB 中写入 VECTOR 并执行 KNN 检索

向量检索在 AI 应用里很常见,但很多工业项目不想为了几个知识库、工单匹配或故障相似度查询再部署一套独立向量数据库。SonnetDB 的思路是把 VECTOR(N) 作为 measurement field,让向量和设备、时间、标签一起进入同一套查询模型。

下面用 C# 嵌入式 API 写一个完整例子。

using SonnetDB.Engine;
using SonnetDB.Sql;
using SonnetDB.Sql.Execution;using var db = Tsdb.Open(new TsdbOptions
{RootDirectory = "data/vector-demo"
});SqlExecutor.Execute(db, """CREATE MEASUREMENT device_embeddings (device_id TAG,source TAG,embedding FIELD VECTOR(4))""");SqlExecutor.Execute(db, """INSERT INTO device_embeddings (time, device_id, source, embedding)VALUES(1713676800000, 'pump-1', 'alarm', [1.0, 0.0, 0.0, 0.0]),(1713676801000, 'pump-2', 'alarm', [0.8, 0.2, 0.0, 0.0]),(1713676802000, 'fan-1',  'log',   [0.0, 1.0, 0.0, 0.0])""");var result = (SelectExecutionResult)SqlExecutor.Execute(db, """SELECT *FROM knn(device_embeddings, embedding, [1.0, 0.0, 0.0, 0.0], 2, 'cosine')WHERE source = 'alarm'""");foreach (var row in result.Rows)
{Console.WriteLine($"time={row[0]}, distance={row[1]}, device={row[2]}");
}

knn(measurement, column, query_vector, k, metric) 返回的前两列固定是 timedistance,后面跟 measurement 的 tag 和 field。因为这里声明了 device_idsourceembedding,所以结果列会是:

time, distance, device_id, source, embedding

距离度量怎么选

SonnetDB 当前支持三类度量:

  • 'cosine''cosine_distance':适合文本 embedding、语义搜索、归一化向量。
  • 'l2''l2_distance''euclidean':适合传感器特征、轨迹特征等物理距离含义更强的向量。
  • 'inner_product''dot''ip':适合希望最大化点积的场景。

所有度量在 KNN 输出里都遵循“距离越小越相似”的排序习惯。

加上时间窗口

工业数据通常要按时间收窄候选集:

var recent = (SelectExecutionResult)SqlExecutor.Execute(db, """SELECT *FROM knn(device_embeddings, embedding, [1, 0, 0, 0], 5)WHERE source = 'alarm'AND time >= 1713676800000AND time < 1713676810000""");

这比单纯向量库多了一层业务语义:先按 tag 和时间窗口缩小数据,再做向量相似度。对设备故障、巡检记录、报警摘要来说,这个组合非常实用。


官网地址:https://sonnetdb.com

技术文章站:https://iotpaper.net

开源仓库:https://github.com/IoTSharp/SonnetDB

http://www.gsyq.cn/news/1526490.html

相关文章:

  • 合肥专业配镜门店排行:5家连锁门店实测对比 - 奔跑123
  • 数据说话!南京市GEO优化公司推荐排名 | 2026年6月TOP8硬核横评与避坑指南 - 936品牌测评网
  • AI时代如何防止大脑‘钙化’:认知代偿的科学应对
  • VSCode配置文件
  • 3步快速解决AutoCAD字体缺失问题:FontCenter终极指南
  • PCIe | 辅助信号与复位机制
  • 从‘端口被占’到丝滑部署:一套预防为主的端口管理策略(附Nmap扫描实战)
  • 计算机Java毕设实战-融合智能推荐算法的卫生健康管理系统的设计与实现 基于 SpringBoot 的个性化健康推荐系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • CANN Transformer加速库ascend-transformer-boost深度实践:昇腾NPU上大模型推理优化的KV Cache管理、算子融合与吞吐调优全记录
  • 从混乱到清晰:ASTRAL如何帮你从基因树中重建物种进化史
  • 系统架构设计师-数据管理、开发工具链与低功耗设计
  • 法考考试科目分数占比|客观题|资料已整理
  • 别再纠结了!用一张图看懂CPLD和FPGA到底怎么选(附Xilinx/Altera型号对比)
  • Mac Mouse Fix 终极指南:让普通鼠标在 macOS 上超越触控板体验
  • AI 驱动的运维变更风险评估与回滚决策:从盲目发布到智能决策,生产变更的安全网
  • 影刀RPA新手教程_手机自动化入门安卓ADB连接与基础操作
  • 2026年海参崴地接服务机构排行及避坑指南 - 互联网科技品牌测评
  • 颠覆性3D打印工作流:Blender3mfFormat插件一站式解决方案
  • 零基础转行AI工程师,为何说“莫瑶教育”可能是你的最优解?一份2026年的深度择校指南 - 教育信息网
  • 邮票、纪念币、纪念钞区别详解!别再混淆,价值差距巨大 - 深鉴新闻
  • 影刀RPA新手教程_第一个完整自动化项目从需求分析到上线的12个步骤
  • 终极指南:用Real-ESRGAN-GUI免费AI工具让模糊图片重获新生
  • Horizon-GS 部署全攻略:从数据集下载到三维重建实战
  • SillyTavern性能调优最佳实践:从延迟优化到内存管理的完整指南
  • 深圳全屋定制支持免费上门量尺出方案的公司有哪些?空间装配前置服务的学术评估与规范筛选
  • 可变参数*args与**kwargs底层原理、混用顺序、生产实战
  • trace.moe完整教程:构建你自己的AI动漫场景搜索引擎
  • 3分钟搭建OBS RTSP服务器:obs-rtspserver插件完整教程
  • 5分钟快速上手猫抓Cat-Catch:浏览器资源嗅探神器的终极指南 [特殊字符]
  • 烘焙食品厂主要分布在哪里?国内主要产区对比