在Milvus中创建集合并在集合中插入数据,然后attu管理工具可以查看

news/2025/1/15 22:06:34/
日志打印出来的是这个,现在attu为什么看不到插入的数据信息,集合信息已经可以看到,为什么看不到数据呢/home/anaconda3/envs/bi-txt-sql/bin/python -X pycache_prefix=/home/.cache/JetBrains/PyCharm2023.2/cpython-cache /home/tools/pycharm-professional-2023.2.5/pycharm-2023.2.5/plugins/python/helpers/pydev/pydevd.py --multiprocess --qt-support=auto --client 127.0.0.1 --port 42745 --file /home/PycharmProjects/bi-txt-sql/app/api/endpoints/testmilvus.py 
已连接到 pydev 调试器(内部版本号 232.10300.41)/home/.local/lib/python3.10/site-packages/torch/__init__.py:235: UserWarning: The NumPy module was reloaded (imported a second time). This can in some cases result in small but subtle issues and is discouraged.from torch._C import *  # noqa: F403
成功连接到 Milvus 服务器
集合 'weather' 不存在,正在创建...
集合 'weather' 已创建
/home/.local/lib/python3.10/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: resume_download is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use force_download=True.warnings.warn(
/home/.local/lib/python3.10/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: resume_download is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use force_download=True.warnings.warn(
嵌入向量生成成功
成功插入 4 条数据到集合 'weather' 中
现有的 Milvus 集合:  ['weather']进程已结束,退出代码为 0

根据日志,你的 Milvus 集合 "weather" 已经创建,并且你成功插入了 4 条数据。但是你在使用 Attu 时看不到这些数据。这可能是由于以下几种原因:

可能原因及解决方法:

1. 未创建索引

Milvus 在插入数据后,需要创建索引以支持快速搜索和可见性。如果没有创建索引,虽然数据已插入,但你在 Attu 中可能看不到可视化的数据。

解决方法:创建索引
你可以在插入数据后创建一个索引。Milvus 支持多种索引类型,如 IVF_FLATIVF_SQ8 等。你可以在插入数据后创建索引:

# 创建索引
index_params = {"metric_type": "L2",  # 可以根据需求选择其他相似度度量方式,如 IP"index_type": "IVF_FLAT","params": {"nlist": 128}
}collection.create_index(field_name="embedding", index_params=index_params)
print("索引已创建")
2. 数据还未加载

Milvus 使用 lazy loading(延迟加载),这意味着插入的数据并不会立即可供查询。你需要显式地调用 load() 方法来加载数据,使它们可用于搜索和可视化。

解决方法:加载集合数据

# 加载集合数据
collection.load()
print("集合数据已加载")
3. Attu 缓存问题

Attu 可能缓存了之前的集合信息,因此即使你插入了数据,Attu 可能没有刷新数据。

解决方法:刷新 Attu
尝试手动刷新 Attu 页面,或者重启 Attu 服务,确保它能够从 Milvus 中获取最新的数据。

docker restart attu
4. Milvus 数据插入未生效

尽管日志显示插入成功,有时候如果数据没有完全提交到 Milvus 中,可能会导致数据不可见。

解决方法:确保数据插入已提交并且集合已 flush

# 插入后 flush 数据
collection.flush()
5. 查看 Attu 中是否选择了正确的集合

确保你在 Attu 中查看的是正确的集合。有时,可能是查看的集合不是你刚刚插入数据的集合。

完整修改后的代码:

确保你在插入数据后创建索引、加载集合,并刷新 Attu:

import torch
from transformers import AutoTokenizer, AutoModel
from pymilvus import CollectionSchema, FieldSchema, DataType, Collection, connections, utility
import numpy as np# 计算文本嵌入的函数
def embed_texts(texts, model, tokenizer):"""使用 Jina-embeddings-v2 模型将文本转化为嵌入向量"""inputs = tokenizer(texts, return_tensors='pt', padding=True, truncation=True)with torch.no_grad():outputs = model(**inputs)embeddings = outputs.last_hidden_state[:, 0, :]  # 提取CLS token嵌入return embeddings.numpy()if __name__ == '__main__':# 创建连接并检查是否成功try:connections.connect(alias="default", host="172.19.17.52", port="19530")print("成功连接到 Milvus 服务器")except Exception as e:print(f"连接 Milvus 失败: {e}")# 定义集合结构,注意我们为主键添加了 is_primary=Trueid_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True)text_field = FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=100)embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768)schema = CollectionSchema(fields=[id_field, text_field, embedding_field])# 集合名称collection_name = "weather"# 检查集合是否存在if not utility.has_collection(collection_name):print(f"集合 '{collection_name}' 不存在,正在创建...")# 创建集合try:collection = Collection(name=collection_name, schema=schema)print(f"集合 '{collection_name}' 已创建")except Exception as e:print(f"创建集合时出错: {e}")else:print(f"集合 '{collection_name}' 已存在,正在使用现有集合...")# 加载现有集合collection = Collection(name=collection_name)# 加载 Jina-embeddings-v2-base-zh 模型和对应的 tokenizermodel_name = 'jinaai/jina-embeddings-v2-base-zh'tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)model = AutoModel.from_pretrained(model_name, trust_remote_code=True)# 示例文本candidate_texts = ['今天天气下雨吗?', '今天是一个晴天', '今天是星期几?', '今天天气怎么样?']# 使用 Jina-embeddings-v2 模型生成文本嵌入向量try:candidate_embeddings = embed_texts(candidate_texts, model, tokenizer)print(f"嵌入向量生成成功")except Exception as e:print(f"生成嵌入向量时出错: {e}")# 插入数据try:collection.insert([candidate_texts, candidate_embeddings.tolist()])collection.flush()print(f"成功插入 {len(candidate_texts)} 条数据到集合 '{collection_name}' 中")except Exception as e:print(f"插入数据时出错: {e}")# 创建索引index_params = {"metric_type": "L2","index_type": "IVF_FLAT","params": {"nlist": 128}}collection.create_index(field_name="embedding", index_params=index_params)print("索引已创建")# 加载集合数据collection.load()print("集合数据已加载")# 查看所有现有的 Milvus 集合try:collections = utility.list_collections()print("现有的 Milvus 集合: ", collections)except Exception as e:print(f"列出现有集合时出错: {e}")

总结:

  1. 创建索引:确保插入后创建索引,以支持查询和可视化。
  2. 加载集合:在插入数据后,显式调用 load() 使数据可用。
  3. 刷新 Attu:刷新或重启 Attu,确保它从 Milvus 获取最新的数据。
  4. 确保正确查看集合:在 Attu 中确认是否选择了正确的集合。

通过这些步骤,你应该能够在 Attu 中看到你插入的数据。


http://www.ppmy.cn/news/1525779.html

相关文章

前端——标签二(超链接)

标签二 超链接标签:a 超链接,实现页面间的跳转和数据传输 a标签的属性 href:跳转路径(url)必须具备,表示点击后会跳转到哪个页面 target:页面打开方式。默认是 _self 如果是 _blank则用新的…

CSDN玩法攻略(维护中)

以下均为测试过的条件 隐形条件和官方描写可能不准确更新不及时 勋章 签到勋章(已下架) 勤写标兵 每周三篇原创等级1 max10 创作能手 lv1 每周1-3 lv2 每周4-6 lv3 每周7-8 lv4 每周>9 持续创作 授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户 五一创作勋章 每…

matlab处理函数2

1、数字数字图像的变换 ① fft2:fft2函数用于数字数字图像的二维傅立叶变换 iimread(104_8.tif); jfft2(i); ②ifft2::ifft2函数用于数字数字图像的二维傅立叶反变换 iimread(104_8.tif);jfft2(i); kifft2(j); 2、模拟噪声生成函数和预定义滤波器 ①…

桥接模式详解和分析JDBC中的应用

🎯 设计模式专栏,持续更新中, 欢迎订阅:JAVA实现设计模式 🛠️ 希望小伙伴们一键三连,有问题私信都会回复,或者在评论区直接发言 桥接模式 文章目录 桥接模式桥接模式的四个核心组成&#xff1a…

SMA2:代码实现详解——Image Encoder篇(Hiera章)

SMA2:代码实现详解——Image Encoder篇(Hiera) 写在前面 大家在SMA2:代码实现详解——Image Encoder篇(FpnNeck)下的留言我已收到,感谢大家的支持,后面如果遇到比较难以讲清的部分可能会使用视频的形式。…

Unity3D类似于桌面精灵的功能实现

前言: 由于最近在做游戏魔改,很多功能在游戏里面没法实现(没错,说的就是排行榜),所以准备用Unity3D开发一个类似于桌面精灵的功能部件,实现效果如下: PS:有需要定制的老…

什么是 Grafana?

什么是 Grafana? Grafana 是一个功能强大的开源平台,用于创建、查看、查询和分析来自多个来源的数据。通过可视化仪表盘(Dashboard),它能够帮助用户监控实时数据、生成历史报告,甚至进行预测分析。Grafana…

JVM四种垃圾回收算法以及G1垃圾回收器(面试)

JVM 垃圾回收算法 标记清除算法:标记清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。 在标记阶段通过根节点,标记所有从根节点开始的对象。然后,在清除阶段,清除所有未被标记的对象 适用场合: 存活对…