Elasticsearch .NET 用于 C# (.NET):完整指南及示例
\n\n1. 这是什么以及为什么需要它
\n\nElasticsearch .NET (NEST) 是官方的高层客户端,用于从 C# 及其他 .NET 平台语言的应用程序中与 Elasticsearch 搜索引擎进行交互。该库提供了一个强类型 API,允许执行所有 Elasticsearch 操作:文档索引、搜索、聚合、索引和映射管理,使用 .NET 开发者熟悉的模式(LINQ、异步方法、通过 System.Text.Json 或 Newtonsoft.Json 进行序列化)。\n
\n\n为什么需要这个库?Elasticsearch 是一个强大的分布式实时全文搜索和分析系统。如果您的 C# 应用程序需要对大量数据(日志、商品、文档)执行复杂搜索、处理分析查询(聚合)或通过编程方式管理 Elasticsearch 集群,那么 NEST 是标准选择。它隐藏了 HTTP 请求和 JSON 序列化的底层细节,提供了流畅接口和强类型支持。\n
\n\n该库支持从 6.x 开始的所有 Elasticsearch 版本,并与 .NET Standard 2.0 兼容,允许在 .NET Framework 4.6.1+、.NET Core 2.0+ 和 .NET 5/6/7/8/9 项目中使用。NEST 由 Elastic 公司和社区积极开发,拥有详细的文档和大量示例。\n
\n\n2. 安装
\n通过 NuGet 包管理器进行安装。使用以下命令之一:
\n// 通过 .NET CLI\ndotnet add package NEST\n\n// 通过包管理器控制台\nInstall-Package NEST\n\n// 或通过 NuGet UI:搜索 "NEST" 并安装最新的稳定版本\n\n也可以安装底层客户端 Elasticsearch.Net,但 NEST 已将其作为依赖项包含在内。
3. 快速入门——最小工作示例
\n创建一个 .NET 控制台应用程序并添加 using 指令:
\nusing System;\nusing System.Threading.Tasks;\nusing Nest;\nusing static System.Console;\n\npublic class Program\n{\n public static async Task Main(string[] args)\n {\n // 1. 配置连接\n var settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n .DefaultIndex("my_index");\n \n var client = new ElasticClient(settings);\n\n // 2. 定义数据模型\n var document = new Product\n {\n Id = 1,\n Name = "笔记本电脑",\n Description = "强大的游戏笔记本电脑",\n Price = 1500.99\n };\n\n // 3. 索引文档\n var indexResponse = await client.IndexAsync(document, idx => idx.Index("products"));\n if (indexResponse.IsValid)\n WriteLine($"文档已索引:{indexResponse.Id}");\n\n // 4. 搜索文档\n var searchResponse = await client.SearchAsync(s => s\n .Index("products")\n .Query(q => q\n .Match(m => m\n .Field(f => f.Name)\n .Query("笔记本电脑")\n )\n )\n );\n\n foreach (var hit in searchResponse.Hits)\n {\n WriteLine($"找到:{hit.Source.Name} - {hit.Source.Price:C}");\n }\n }\n}\n\npublic class Product\n{\n public int Id { get; set; }\n public string Name { get; set; }\n public string Description { get; set; }\n public double Price { get; set; }\n}\n \n\n4. 主要方法/函数/类
\n\n4.1. ElasticClient.IndexAsync
\n签名: Task<IndexResponse> IndexAsync<T>(T document, Func<IndexDescriptor<T>, IIndexRequest<T>> selector = null, CancellationToken ct = default)
功能: 索