当前位置: 首页 > 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.jsqmd.com/news/1014669/

相关文章:

  • 数据说话!南京市GEO优化公司推荐排名 | 2026年6月TOP8硬核横评与避坑指南 - 936品牌测评网
  • StarRailCopilot:崩坏星穹铁道全自动脚本终极指南,解放双手的智能游戏助手
  • Fast-GitHub:彻底解决国内开发者访问GitHub的终极加速方案
  • 合肥专业配镜门店排行:5家连锁门店实测对比 - 奔跑123
  • AI时代如何防止大脑‘钙化’:认知代偿的科学应对
  • 在macOS上玩转Xbox手柄:360Controller驱动完全指南
  • [智能体-401]:项目:Make 平台 AI Agent 工作流程详解
  • VSCode配置文件
  • PCL2内存优化深度解析:3大核心技术让Minecraft流畅运行
  • 终极免费方案:Wand-Enhancer让你的游戏修改器突破时间限制
  • 湛江市黄金回收三家门店实地探店综合测评 - 靖昱黄金回收
  • [智能体-404]:应用 - Make平台搭建智能体与AI原生的低代码智能体平台的比较
  • 3步快速解决AutoCAD字体缺失问题:FontCenter终极指南
  • PCIe | 辅助信号与复位机制
  • MySQL高可用实战:用ProxySQL和MaxScale搭建读写分离集群,哪个更适合你的业务?
  • 从‘端口被占’到丝滑部署:一套预防为主的端口管理策略(附Nmap扫描实战)
  • 计算机Java毕设实战-融合智能推荐算法的卫生健康管理系统的设计与实现 基于 SpringBoot 的个性化健康推荐系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 3分钟搞定Windows安卓应用安装:APK-Installer让跨平台如此简单!
  • 深入解读SPEC CPU 2017测试报告:从rate/speed分数到实际CPU性能选购指南
  • 法考考试科目及分数|科目分值|资料已整理
  • CANN Transformer加速库ascend-transformer-boost深度实践:昇腾NPU上大模型推理优化的KV Cache管理、算子融合与吞吐调优全记录
  • RIP vs OSPF实战对比:在同一个GNS3拓扑里配置两种协议,看谁收敛更快、路由更优
  • 如何深度解析ComfyUI IPAdapter Plus多图输入与风格融合技术
  • Ryujinx Switch模拟器终极指南:在电脑上免费畅玩任天堂游戏的完整解决方案
  • 系统架构设计师-实时性评价、调度算法与内核架构选型
  • 从混乱到清晰:ASTRAL如何帮你从基因树中重建物种进化史
  • 系统架构设计师-数据管理、开发工具链与低功耗设计
  • 【C语言期末速成篇】一篇全拿下,八大排序算法保姆级图解完整源码
  • FanControl终极指南:彻底掌控Windows电脑风扇,告别噪音烦恼[特殊字符]
  • 重载堡垒:MCM08010H05K00技术指南