| File: Program.cs | Web Access |
| Project: src\playground\milvus\MilvusPlayground.ApiService\MilvusPlayground.ApiService.csproj (MilvusPlayground.ApiService) |
using Milvus.Client; var builder = WebApplication.CreateBuilder(args); // Add service defaults & Aspire client integrations. builder.AddServiceDefaults(); builder.AddMilvusClient("milvus"); // Add services to the container. builder.Services.AddProblemDetails(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseExceptionHandler(); app.MapDefaultEndpoints(); app.MapGet("/create", async (MilvusClient milvusClient, ILogger<Program> logger) => { string collectionName = "book"; MilvusCollection collection = milvusClient.GetCollection(collectionName); //Check if this collection exists var hasCollection = await milvusClient.HasCollectionAsync(collectionName); if (hasCollection) { await collection.DropAsync(); Console.WriteLine("Drop collection {0}", collectionName); } collection = await milvusClient.CreateCollectionAsync( collectionName, new[] { FieldSchema.Create<long>("book_id", isPrimaryKey:true), FieldSchema.Create<long>("word_count"), FieldSchema.CreateVarchar("book_name", 256), FieldSchema.CreateFloatVector("book_intro", 2) } ); logger.LogInformation("Collection created: book"); Random ran = new(); List<long> bookIds = new(); List<long> wordCounts = new(); List<ReadOnlyMemory<float>> bookIntros = new(); List<string> bookNames = new(); for (long i = 0L; i < 2000; ++i) { bookIds.Add(i); wordCounts.Add(i + 10000); bookNames.Add($"Book Name {i}"); float[] vector = new float[2]; for (int k = 0; k < 2; ++k) { vector[k] = ran.Next(); } bookIntros.Add(vector); } MutationResult result = await collection.InsertAsync( new FieldData[] { FieldData.Create("book_id", bookIds), FieldData.Create("word_count", wordCounts), FieldData.Create("book_name", bookNames), FieldData.CreateFloatVector("book_intro", bookIntros), }); logger.LogInformation("Added vectors"); // Check result logger.LogInformation("Insert status: {0},", result.ToString()); // Create index await collection.CreateIndexAsync( "book_intro", //MilvusIndexType.IVF_FLAT,//Use MilvusIndexType.IVF_FLAT. IndexType.AutoIndex,//Use MilvusIndexType.AUTOINDEX when you are using zilliz cloud. SimilarityMetricType.L2); // Check index status IList<MilvusIndexInfo> indexInfos = await collection.DescribeIndexAsync("book_intro"); foreach (var info in indexInfos) { logger.LogInformation("FieldName:{0}, IndexName:{1}, IndexId:{2}", info.FieldName, info.IndexName, info.IndexId); } logger.LogInformation("Index created"); // Then load it await collection.LoadAsync(); logger.LogInformation("Collection loaded"); return Results.Ok("Collection created"); }); app.MapGet("/search", async (MilvusClient milvusClient, ILogger<Program> logger) => { MilvusCollection collection = milvusClient.GetCollection("book"); // Query string expr = "book_id in [2,4,6,8]"; QueryParameters queryParameters = new(); queryParameters.OutputFields.Add("book_id"); queryParameters.OutputFields.Add("book_name"); queryParameters.OutputFields.Add("word_count"); IReadOnlyList<FieldData> queryResult = await collection.QueryAsync( expr, queryParameters); return queryResult[2]; }); app.Run();