Elasticsearch 客户端 for C# (.NET):NEST 和 Elastic.Clients.Elasticsearch

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Elasticsearch 客户端 for C# (.NET):NEST 和 Elastic.Clients.Elasticsearch



Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛用于全文搜索、日志记录、监控和数据分析。要从 C# (.NET) 应用程序中操作 Elasticsearch,有两个主要的官方客户端:NEST(高级客户端,提供 fluent API)和 Elastic.Clients.Elasticsearch(从 8.x 版本开始提供的新低级客户端)。在本文中,我们将详细介绍这两种方法、安装步骤、基本操作以及代码示例。



1. 什么是 .NET 的 Elasticsearch 客户端?



Elasticsearch 提供 RESTful API,但在 C# 中直接处理 HTTP 请求并不方便。官方客户端解决了这个问题:

  • NEST — 一个成熟可靠的高级客户端。提供强类型查询、POCO 类映射和 fluent 接口。推荐用于 .NET Framework 和 .NET Core 3.1 项目。
  • Elastic.Clients.Elasticsearch — 新客户端(从 Elasticsearch 8.x 开始)。轻量级、异步,支持 .NET 6+。使用 System.Text.Json,无需额外依赖。


2. 安装库



通过 NuGet 进行安装。对于 NEST:

dotnet add package NEST

对于新客户端:

dotnet add package Elastic.Clients.Elasticsearch


3. 连接到 Elasticsearch



使用 NEST 连接的示例:

var settings = new ConnectionSettings(new Uri("http://localhost:9200"))    .DefaultIndex("my_index");var client = new ElasticClient(settings);


使用 Elastic.Clients.Elasticsearch 连接的示例:

var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));var client = new ElasticsearchClient(settings);


4. 定义数据模型



为了操作文档,我们创建一个 POCO 类:

public class Product{    public int Id { get; set; }    public string Name { get; set; }    public string Description { get; set; }    public decimal Price { get; set; }    public DateTime CreatedAt { get; set; }}


5. CRUD 操作(创建、读取、更新、删除)



5.1. 索引文档(创建/更新)

NEST:

var product = new Product { Id = 1, Name = "笔记本电脑", Price = 75000 };var response = await client.IndexAsync(product, idx => idx.Index("products"));


Elastic.Clients.Elasticsearch:

var product = new Product { Id = 1, Name = "笔记本电脑", Price = 75000 };var response = await client.IndexAsync(product, "products", 1);


5.2. 根据 ID 获取文档

NEST:

var response = await client.GetAsync<Product>(1, g => g.Index("products"));var product = response.Source;


Elastic.Clients.Elasticsearch:

var response = await client.GetAsync<Product>("products", 1);var product = response.Source;


5.3. 更新文档

NEST:

var response = await client.UpdateAsync<Product>(1, u => u    .Index("products")    .Doc(new Product { Name = "HP 笔记本电脑", Price = 80000 }));


Elastic.Clients.Elasticsearch:

var response = await client.UpdateAsync<Product>("products", 1, u => u    .Doc(new Product { Name = "HP 笔记本电脑", Price = 80000 }));


5.4. 删除文档

NEST:

var response = await client.DeleteAsync<Product>(1, d => d.Index("products"));


Elastic.Clients.Elasticse

推荐