为什么在C#中使用NEST客户端而不是通过弹性搜索JSON查询直接查询弹性搜索服务器?

时间:2018-03-23 10:37:31

标签: elasticsearch nest

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

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

2 个答案:

答案 0 :(得分:2)

以下是您可能选择使用NEST(Elasticsearch的高级客户端)的原因的非详尽列表:

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

答案 1 :(得分:0)

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

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

一开始,DSL会让人感到笨拙,但是一旦您习惯了DSL,就会意识到它的严格结构阻止您以无效的方式将过滤器和聚合链接在一起。这意味着在编写代码并准备对其进行修复时,可以捕获错误,而不必在以后的生产中使用。

#2为诸如Visual Studio和Code的IDE提供完成代码所需的一切

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

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

上写了一个有关此的博客