为什么在C#中使用NEST客户端,而不是直接通过elasticsearchJSON查询来查询elasticsearch服务器?

Why use NEST client in C# and not directly query elastic search server through elastic search JSON query?

我们总是在意义上创建弹性搜索查询,然后在 NEST 中创建它的相应版本。

使用 NEST 客户端而不是直接使用 JSON 弹性搜索查询来取回搜索文档有什么好处?

以下是您可能选择使用 Elasticsearch 的高级客户端 NEST 的 non-exhaustive 原因列表:

  • 受 .NET 4.5、.NET 4.6 和 .NET Standard 1.3(及更高版本)支持和测试
  • 所有请求和响应都建模为类型
  • 允许将文档建模为普通旧 CLR 对象 (POCO)
  • 所有 Elasticsearch API 已映射
  • 强大流畅 API 使用 lambda 表达式使构建查询变得更加容易。包括无条件查询等功能。
  • 对象初始值设定项 API 如果您更喜欢将对象组合在一起,而不是使用流利的 API
  • 如果您需要使用字符串、字节数组、匿名类型执行请求,则公开低级客户端。允许混合和匹配 request/response 类型与更多原始类型
  • 自动故障转移和重试语义
  • 有效 端点响应的内在知识,例如未找到文档的 404 响应可能仍被视为有效响应
  • 用于较长 运行 操作的可观察辅助方法,例如BulkAllScrollAllReindex
  • Maintained by Elastic as an official client,社区做出了巨大贡献(谢谢!)。包括从源代码构建的文档,以减少源代码的偏差,并使其更容易不断改进
  • 可插拔组件,例如IConnectionIRequestPipelineIElasticsearchSerializer

使用像 NEST 这样的强类型库有两个主要原因。

1.它可以防止您尝试大多数无效请求

DSL 一开始可能会觉得很麻烦,但是一旦您习惯了它,您就会意识到它严格的结构可以防止您以无效的方式将过滤器和聚合链接在一起。这意味着可以在您编写代码时发现错误,并准备修复它……而不是在生产后期。

#2 像 Visual Studio 一样给 IDE 并编写代码完成所需的所有内容

就像 Kibana 帮助您在开发工具中编写 Elasticsearch 查询一样,您的 IDE 可以提供语法高亮显示和代码完成功能,可以节省您来回查看文档或 Kibana 的时间 运行。这在动态构建查询时非常有用。

资料来源:我最近在 the benefits of using a strongly-typed library like NEST for generating Elasticsearch queries

上写了一篇关于此的博客