CRUD 使用示例
编辑CRUD 使用示例编辑
本页面帮助您了解如何使用 .NET 客户端执行各种基本的 Elasticsearch CRUD(创建、读取、更新、删除)操作。它演示了如何通过将对象索引到 Elasticsearch 来创建文档,读取文档,通过 ID 检索文档或执行搜索,更新文档中的字段以及删除特定文档。
这些示例假设您有一个可通过名为 client
的局部变量访问的 ElasticsearchClient
实例,并且您的 C# 文件中有多个 using 指令。
using System; using Elastic.Clients.Elasticsearch; using Elastic.Clients.Elasticsearch.QueryDsl; var client = new ElasticsearchClient();
默认构造函数假定一个不安全的 Elasticsearch 服务器正在运行并暴露在 https://127.0.0.1:9200 上。有关连接到安全服务器和 Elastic Cloud 部署的示例,请参阅连接。 |
这些示例操作表示推文的数据。推文在客户端应用程序中使用名为 *Tweet* 的 C# 类建模,该类包含多个映射到存储在 Elasticsearch 中的文档结构的属性。
public class Tweet { public int Id { get; set; } public string User { get; set; } public DateTime PostDate { get; set; } public string Message { get; set; } }
索引文档编辑
可以通过创建表示推文的实例并通过客户端对其进行索引来索引文档。在这些示例中,我们将使用名为 *my-tweet-index* 的索引。
var tweet = new Tweet { Id = 1, User = "stevejgordon", PostDate = new DateTime(2009, 11, 15), Message = "Trying out the client, so far so good?" }; var response = await client.IndexAsync(tweet, "my-tweet-index"); if (response.IsValidResponse) { Console.WriteLine($"Index document with ID {response.Id} succeeded."); }
创建 |
|
首选异步 API,这需要等待响应。 |
|
检查响应上的 |
|
如有必要,访问 |
获取文档编辑
var response = await client.GetAsync<Tweet>(1, idx => idx.Index("my-tweet-index")); if (response.IsValidResponse) { var tweet = response.Source; }
搜索文档编辑
客户端公开了一个流畅的接口和一个强大的查询 DSL 用于搜索。
var response = await client.SearchAsync<Tweet>(s => s .Index("my-tweet-index") .From(0) .Size(10) .Query(q => q .Term(t => t.User, "stevejgordon") ) ); if (response.IsValidResponse) { var tweet = response.Documents.FirstOrDefault(); }
泛型类型参数指定了 |
|
如果在 |
|
对 |
|
可以通过 |
如果不喜欢 lambda 表达式,您可能更喜欢对请求使用对象初始化器语法。
var request = new SearchRequest("my-tweet-index") { From = 0, Size = 10, Query = new TermQuery("user") { Value = "stevejgordon" } }; var response = await client.SearchAsync<Tweet>(request); if (response.IsValidResponse) { var tweet = response.Documents.FirstOrDefault(); }
更新文档编辑
可以通过多种方式更新文档,包括为现有文档 ID 提供完整的替换。
tweet.Message = "This is a new message"; var response = await client.UpdateAsync<Tweet, Tweet>("my-tweet-index", 1, u => u .Doc(tweet)); if (response.IsValidResponse) { Console.WriteLine("Update document succeeded."); }
删除文档编辑
可以通过提供要删除的文档的 ID 来删除文档。
var response = await client.DeleteAsync("my-tweet-index", 1); if (response.IsValidResponse) { Console.WriteLine("Delete document succeeded."); }