CRUD 使用示例
编辑CRUD 使用示例
编辑本页面帮助您了解如何使用 .NET 客户端执行各种基本的 Elasticsearch CRUD(创建、读取、更新、删除)操作。它演示了如何通过将对象索引到 Elasticsearch 中来创建文档,读取文档,通过 ID 或执行搜索检索文档,更新文档中的一个字段以及删除特定文档。
这些示例假设您有一个 ElasticsearchClient
实例,可以通过名为 client
的局部变量访问,并且您的 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,这些 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."); }