.Net中使用Milvus
·
一、据实践要求.net8环境,则需要安装VS2022以支持.net8环境
二、创建控制台应用程序(可参考文章JieBaTokenize使用)

并将Milvus.Client(2.3.0-preview.1)引入

三、代码
using Milvus.Client;
internal class Program
{
static async Task Main(string[] args)
{
//AIService ai = new AIService();
//ai.TestA();
var result = QueryData().GetAwaiter().GetResult();
//var result = InsertData().Result;
Console.WriteLine(result.ToString());
}
public static async Task<MutationResult> InsertData()
{
//创建客户端
MilvusClient milvusClient = new MilvusClient("192.168.0.238");
MilvusCollection collection = milvusClient.GetCollection("cs");
var movieIds = new[] { 9L, 10L };
var movieNames = new[] { "The 1", "I2" };
var movieDescriptions = new ReadOnlyMemory<float>[] {
new [] { 0.20022575f, 0.23998135f },
new [] { 0.20327095f, -0.2563685f }
};
var results = await collection.InsertAsync(new FieldData[]
{
FieldData.Create("movie_id", movieIds),
FieldData.Create("movie_name", movieNames),
FieldData.CreateFloatVector("movie_description", movieDescriptions)
});
//await collection.CreateIndexAsync(
// fieldName: "movie_description",
// indexType: IndexType.Flat,
// metricType: SimilarityMetricType.L2,
// indexName: "movie_idx");
//await collection.LoadAsync();
//await collection.WaitForCollectionLoadAsync();
//var parameters = new SearchParameters
//{
// OutputFields = { "movie_name" },
// ConsistencyLevel = ConsistencyLevel.Strong,
// ExtraParameters = { ["nprobe"] = "1024" }
//};
//var results = await collection.SearchAsync(
// vectorFieldName: "movie_description",
// vectors: new ReadOnlyMemory<float>[] { new[] { 0.12217915f, -0.034832448f } },
// SimilarityMetricType.L2,
// limit: 3,
// parameters);
return results;
}
public static async Task<SearchResults> QueryData()
{
////创建客户端
MilvusClient milvusClient = new MilvusClient("192.168.0.238");
var schema = new CollectionSchema
{
Fields =
{
FieldSchema.Create<long>("movie_id", isPrimaryKey: true),
FieldSchema.CreateVarchar("movie_name", maxLength: 200),
FieldSchema.CreateFloatVector("movie_description", dimension: 2)
}
};
var collection = await milvusClient.CreateCollectionAsync(collectionName: "hh", schema: schema, shardsNum: 2);
var movieIds = new[] { 1L, 2L, 3L, 4L, 5L };
var movieNames = new[] { "The Lion King", "Inception", "Toy Story", "Pulp Fiction", "Shrek" };
var movieDescriptions = new ReadOnlyMemory<float>[] {
new [] { 0.10022575f, 0.23998135f },
new [] { 0.10327095f, -0.2563685f },
new [] { 0.095857024f, 0.201278f },
new [] { 0.106827796f, -0.21676421f },
new [] { 0.09568083f, 0.21177962f }
};
await collection.InsertAsync(new FieldData[]
{
FieldData.Create("movie_id", movieIds),
FieldData.Create("movie_name", movieNames),
FieldData.CreateFloatVector("movie_description", movieDescriptions)
});
await collection.CreateIndexAsync(
fieldName: "movie_description",
indexType: IndexType.Flat,
metricType: SimilarityMetricType.L2,
indexName: "movie_idx");
await collection.LoadAsync();
await collection.WaitForCollectionLoadAsync();
var parameters = new SearchParameters
{
OutputFields = { "movie_name" },
ConsistencyLevel = ConsistencyLevel.Strong,
ExtraParameters = { ["nprobe"] = "1024" }
};
var results = await collection.SearchAsync(
vectorFieldName: "movie_description",
vectors: new ReadOnlyMemory<float>[] { new[] { 0.12217915f, -0.034832448f } },
SimilarityMetricType.L2,
limit: 3,
parameters);
return results;
////定义集合名称和向量维度
//string collectionName = "test";
//int dimension = 128;
//MilvusCollection collection = milvusClient.GetCollection(collectionName);
//// 执行查询
//string expr = "id in [0,1]";
//SearchParameters queryParameters = new SearchParameters();
//queryParameters.OutputFields.Add("fileName");
//queryParameters.OutputFields.Add("knowType");
//queryParameters.OutputFields.Add("content");
//queryParameters.OutputFields.Add("desc");
//float[] fr = { 0.1f, 0.2f };
//ReadOnlyMemory<float> memory = fr.AsMemory<float>();
//var parameters = new SearchParameters
//{
// OutputFields = { "knowType" },
// ConsistencyLevel = ConsistencyLevel.Strong,
// ExtraParameters = { ["nprobe"] = "1024" }
//};
//var result = await collection.SearchAsync("vector", vectors: new ReadOnlyMemory<float>[] { new[] { 0.12217915f, -0.034832448f } }, SimilarityMetricType.L2, limit: 2, queryParameters);
//return result;
//关闭连接
//milvusClient.Dispose();
}
}
四、测试代码
五、测试成功,则将Milvus引入到AI项目中实际应用
①引入Milvus.Client(2.3.0-priview.1)

②由于AI项目不是控制台应用程序,所以在其运行环境中不会自己生成这些外部引用的dll,比如这里的Milvus.Client应用时就不会生成需要的dll,这里的解决办法就是将一开始创建的Ares.AI.Test项目运行后产生的dll,手动放置到AI项目运行环境下,再重启服务,具体如下:
选中Ares.AI.Test,右键在文件资源管理器中打开文件夹
![]()
找到该目录下,将红色√的dll拷贝到AI项目运行环境中去

也即拷贝到如下路径下,注意要(.net8的)
更多推荐



所有评论(0)