2025年c依赖腾讯向量数据库实现商品相似度检索

c依赖腾讯向量数据库实现商品相似度检索本文介绍可用于实现商品检索 商品相似度推荐 根据用户行为标签用户推荐 使用之前需要对向量数据库和 Embedding 有一些基本的了解 目前国产的向量产品我体验下来发现腾讯的是封装的比较简单的 同时腾讯也开源了向量模型不需要我们自建 为小公司使用节约了资源 具体什么是向量数据库我这就不过多介绍了

大家好,我是讯享网,很高兴认识大家。

具体什么是向量数据库我这就不过多介绍了,下面我们只讲在c#中如何实现。

具体实现方法如下

  1. 需先申请腾讯向量数据库,目前是公测阶段不收取费用。但是需要申请审核。
    在这里插入图片描述
    讯享网
  2. 开通Embedding功能,此功能是根据模型数据向量化。
    在这里插入图片描述
  3. 可以直接登录在腾讯数据库控制台创建db也可以通过接口创建
    在这里插入图片描述
  4. 创建一个collection用于存放数据
    在这里插入图片描述
  5. 选择插入数据,此时我们并不知道需要插入的数据的向量值是多少,此功能插入会自动转化向量
    在这里插入图片描述

  6. 然后我们就可以通过查询接口查询到数据了
    在这里插入图片描述

下面是c#中实现的代码

 /// <summary> /// 腾讯向量数据库api /// </summary> [Route("[controller]/[action]")] public class API_TencentVectorDBController : Controller { 
    /// <summary> /// 创建库 /// </summary> /// <param name="database"></param> /// <returns></returns> [HttpPost] public IActionResult DataBaseCreate(string database) { 
    var ret = DataBase_Handle.Create(database); return Json(ret); } /// <summary> /// 删除库 /// </summary> /// <param name="database"></param> /// <returns></returns> [HttpPost] public IActionResult DataBaseDrop(string database) { 
    var ret = DataBase_Handle.Drop(database); return Json(ret); } /// <summary> /// 获取库 /// </summary> /// <returns></returns> [HttpPost] public IActionResult DataBaseGetList() { 
    var ret = DataBase_Handle.GetList(); return Json(ret); } /// <summary> /// 创建集合 /// </summary> /// <param name="createEntity">集合基本对象,创建时indexes为空即可</param> /// <param name="embedding">向量对象</param> /// <param name="indexType">向量指定索引类型</param> /// <param name="dimension">指定向量维度[1,4096],如果配置Embedding则为空</param> /// <param name="metricType">指定向量之间距离度量的算法L2,IP,COSINE</param> /// <param name="fileds">其他字段</param> /// <param name="nlist">指索引中的聚类中心数量。取值类型:uint64。取值范围:[1,65536]</param> /// <param name="M">indexType类型为HNSW时为每个节点在检索构图中可以连接多少个邻居节点一般可是只为16,其余的则为 指乘积量化中每个子向量的维度</param> /// <param name="efConstruction">搜索时,指定寻找节点邻居遍历的范围。数值越大构图效果越好,构图时间越长一般可设置为200</param> /// <returns></returns> [HttpPost] public IActionResult CollectionCreate(Collection_Entity.CollectionEntity createEntity,string embedding, string indexType, int? dimension, string metricType, string fileds, int? nlist = null, int? M = 16, int? efConstruction = 200) { 
    //向量信息 if (!string.IsNullOrEmpty(embedding)) { 
    createEntity.embedding = JsonConvert.DeserializeObject<Collection_Entity.Embedding>(embedding); } //字段信息 List<string> _fileds = new List<string> { 
    }; if (!string.IsNullOrEmpty(fileds)) { 
    _fileds = JsonConvert.DeserializeObject<List<string>>(fileds); } //创建向量集合 var ret = Collection_Handle.Create(createEntity, indexType, dimension, metricType, _fileds, nlist, M, efConstruction); return Json(ret); } /// <summary> /// 删除集合 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionDrop(MySQLCommon.MC_VectorDb.Tencent.Common.BaseEntity entity) { 
    var ret = Collection_Handle.Drop(entity); return Json(ret); } /// <summary> /// 查询指定的库包含的所有集合 /// </summary> /// <param name="database"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionList(string database) { 
    var ret = Collection_Handle.List(database); return Json(ret); } /// <summary> /// 获取集合信息 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionDescribe(MySQLCommon.MC_VectorDb.Tencent.Common.BaseEntity entity) { 
    var ret = Collection_Handle.Describe(entity); return Json(ret); } /// <summary> /// 清空指定集合的数据与索引 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionTruncate(MySQLCommon.MC_VectorDb.Tencent.Common.BaseEntity entity) { 
    var ret = Collection_Handle.Truncate(entity); return Json(ret); } /// <summary> /// 清空指定集合的数据与索引 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult AliasSet(Alias_Entity.AliasBaseEntity entity) { 
    var ret = Alias_Handle.Set(entity); return Json(ret); } /// <summary> /// 删除集合的别名 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult AliasDelete(Alias_Entity.AliasBaseEntity entity) { 
    var ret = Alias_Handle.Delete(entity); return Json(ret); } /// <summary> /// 给 Collection 中插入向量数据。如果 Collection 在创建时,已配置 Embedding 参数,则仅需要插入文本信息,Embedding 服务会自动将文本信息转换为向量数据,存入数据库 /// </summary> /// <param name="insert"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentInsert(Document_Entity.InsertDocumentsEntity insert) { 
    var ret = Document_Handle.Insert(insert); return Json(ret); } /// <summary> /// 精确查找与查询条件完全匹配的向量 /// </summary> /// <param name="query"></param> /// <param name="filter"></param> /// <param name="limit"></param> /// <param name="offset"></param> /// <param name="retrieveVector"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentQuery(Document_Entity.QueryResponDocumentEntity query,string filter, int limit = 100, int offset = 1,bool? retrieveVector=false) { 
    if (query.query == null) { 
    query.query = new Document_Entity.QueryResponDocumentEntity.Query { 
    limit = limit, filter= filter, offset = offset, retrieveVector = retrieveVector }; } var ret = Document_Handle.Query(query); return Json(ret); } /// <summary> /// 向量检索 /// </summary> /// <param name="seach"></param> /// <param name="embeddingItems"></param> /// <param name="outputFields"></param> /// <param name="filter"></param> /// <param name="limit"></param> /// <param name="retrieveVector"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentSeach(Document_Entity.SeachResponDocumentEntity seach, string embeddingItems, string filter, string outputFields="[]", int limit = 10, bool? retrieveVector = false) { 
    if (seach.search == null) { 
    seach.search = new Document_Entity.SeachResponDocumentEntity.Search { 
    embeddingItems = JsonConvert.DeserializeObject<List<string>>(embeddingItems), outputFields= JsonConvert.DeserializeObject<List<string>>(outputFields), limit = limit, filter = filter, retrieveVector= retrieveVector }; } var ret = Document_Handle.Seach(seach); return Json(ret); } /// <summary> /// 删除指定 id(Document ID)的文档 /// </summary> /// <param name="delete"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentDelete(Document_Entity.DeleteResponDocumentEntity delete) { 
    var ret = Document_Handle.Delete(delete); return Json(ret); } /// <summary> /// 字段更新 /// </summary> /// <param name="u"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentUpdate(Document_Entity.UpdateResponDocumentEntity u) { 
    var ret = Document_Handle.Update(u); return Json(ret); } /// <summary> /// 重建索引 /// </summary> /// <param name="rebuild"></param> /// <returns></returns> [HttpPost] public IActionResult IndexRebuild(Index_Entity.RebuildEntity rebuild) { 
    var ret = Index_Handle.Rebuild(rebuild); return Json(ret); } /// <summary> /// 测试插入数据 /// </summary> /// <returns></returns> [HttpPost] public IActionResult TestInsert() { 
    //int total = 0; //int totalZS = 0; //var goods = MC_Goods.GoodsHandle.Get_Goods_List(new MySQLCommon.WFHXNEW_MSQL.MC_Goods.GoodsHandle.Request_Goods_PageList { bid = 036672, isShelves = true }, ref total, ref totalZS); //先根据平台获取商品 var resultStr = Common.NewRedis(Emun.redisEumn.商品信息).GetEntity<string>( + "_Goods_Type_Group_Show"); var groups_Goods = JsonConvert.DeserializeObject<List<Goods_Type_Group_Show_Class>>(resultStr); List<long?> _gids = new List<long?> { 
    }; //获取商品 foreach (var item in groups_Goods) { 
    foreach (var _item in item.goodList) { 
    _gids.Add(_item.gid); } } //获取可显示的数据 var goods = MySQLCommon.WFHXNEW_MSQL.MC_Goods.GoodsHandle.Get_Goods_List_ByRdis(_gids); //插入数据 Document_Entity.InsertDocumentsEntity insert = new Document_Entity.InsertDocumentsEntity { 
    database = "goods", collection = "seach", buildIndex = true }; List<object> documents = new List<object> { 
    }; foreach (var item in goods) { 
    if (item.gtName != "测试") { 
    documents.Add(new { 
    id = item.id.ToString(), text = item.title, title = item.title, short_title = item.short_title, gtName = item.gtName, imgs = item.list_imgs }); } } insert.documents = documents; //调用接口 var ret = Document_Handle.Insert(insert); return Json(ret); } } 

讯享网

查询结果
在这里插入图片描述

猜你喜欢(商品相似度)查询时传入商品名称即可返回需要的相似商品。

用户行为分析得到用户的标签,然后根据标签返回相似的商品。、

本文章参考腾讯向量数据库有兴趣的同学可以共同研究下。

小讯
上一篇 2025-01-27 12:49
下一篇 2025-03-06 15:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/32485.html