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

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

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

开始课程

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



Elasticsearch 是一个基于 Apache Lucene 的强大分布式搜索和分析系统。为了从 C# (.NET) 应用程序中与其交互,存在多个官方和第三方客户端。在本文中,我们将详细介绍两个主要库:NEST(高级客户端)和 Elastic.Clients.Elasticsearch(Elastic 推出的新官方客户端)。您将学习如何安装、配置并使用它们进行索引、搜索和数据管理。



1. NEST — 高级客户端(推荐用于复杂项目)



NEST 是一个成熟且经过验证的客户端,它通过使用 POCO 类提供强类型 API。它自动将 JSON 序列化/反序列化为 C# 对象,并支持用于构建查询的流畅语法。



安装

dotnet add package NEST


NEST 使用示例

using Nest;using System;

// 文档的 POCO 类public class Article{ public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } public DateTime PublishDate { get; set; }}

class Program{ static async Task Main(string[] args) { // 连接配置 var settings = new ConnectionSettings(new Uri("http://localhost:9200")) .DefaultIndex("articles") .EnableDebugMode(); // 启用请求日志记录

var client = new ElasticClient(settings);

// 1. 索引文档 var article = new Article { Id = 1, Title = "Elasticsearch 在 C# 中", Content = "从 .NET 使用 Elasticsearch 的详细指南", PublishDate = DateTime.UtcNow };

var indexResponse = await client.IndexDocumentAsync(article); Console.WriteLine($"索引:{indexResponse.IsValid}");

// 2. 搜索 var searchResponse = await client.SearchAsync<Article>(s => s .Query(q => q .Match(m => m .Field(f => f.Title) .Query("Elasticsearch") ) ) );

foreach (var hit in searchResponse.Hits) { Console.WriteLine($"找到:{hit.Source.Title}"); } }}


2. Elastic.Clients.Elasticsearch — 新的官方客户端



从 8.x 版本开始,Elastic 发布了新的客户端 Elastic.Clients.Elasticsearch(也称为 Elasticsearch.Net)。它更轻量、异步,并且与最新版本的 Elasticsearch 兼容。与 NEST 不同,它不强制要求使用 POCO 类,尽管它支持它们。



安装

dotnet add package Elastic.Clients.Elasticsearch


新客户端使用示例

using Elastic.Clients.Elasticsearch;using Elastic.Clients.Elasticsearch.QueryDsl;using System;

class Program{ static async Task Main(string[] args) { // 连接配置 var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200")) .DefaultIndex("articles");

var client = new ElasticsearchClient(settings);

// 1. 使用 POCO 索引 var article = new Article { Id = 2, Title = "新的 Elasticsearch 客户端", Content = "Elastic.Clients.Elasticsearch 功能概述", PublishDate = DateTime.UtcNow };

var indexResponse = await client.IndexAsync(article, idx => idx.Index("articles")); Console.WriteLine($"索引:{indexResponse.IsValidResponse}");

// 2. 使用 lambda 语法搜索 var se

推荐