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."); }