elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

在弹性搜索中,我们应该使用什么客户端(java或rest)来索引数据?

在弹性搜索中,我们应该使用什么客户端(java或rest)来索引数据?,java,elasticsearch,Java,elasticsearch,在elastic search 1.4.4中,我使用java客户端为我的数据编制索引。 但是现在我觉得,如果我们要从1.4.4升级到更新的2.3.2版本,那么使用java客户端就是一场噩梦。如果你们中有人使用过rest,请告诉我使用rest不可能带来的任何好处。主要好处是性能。在大多数情况下,JavaAPI比Jest快。我建议阅读这篇文章: 传输客户端 它非常快,在JVM上本机运行。序列化是 有效并且消息和操作中几乎没有开销 发送到Elasticsearch实例/从Elasticsearch实例

在elastic search 1.4.4中,我使用java客户端为我的数据编制索引。
但是现在我觉得,如果我们要从1.4.4升级到更新的2.3.2版本,那么使用java客户端就是一场噩梦。如果你们中有人使用过rest,请告诉我使用rest不可能带来的任何好处。

主要好处是性能。在大多数情况下,JavaAPI比Jest快。我建议阅读这篇文章:

传输客户端

它非常快,在JVM上本机运行。序列化是 有效并且消息和操作中几乎没有开销 发送到Elasticsearch实例/从Elasticsearch实例发送。它需要保持平衡 Elasticsearch服务器和客户端版本有些同步。先前的 Elasticsearch 1.0需要完全相同的版本,但是 较新版本(1.0及更高版本)支持版本之间的交互。 在两个服务器上运行相同的JVM更新版本也是有益的 由于异常序列化和其他原因导致的客户端和服务器 更新之间可能存在细微差异

结论

我们很容易花很多时间来找出两者之间的差异 Elasticsearch使用了无数的协议和客户端,但是 选择其实很简单:如果可能,使用高性能 您熟悉的HTTP客户端或官方语言 绑定

如果您使用的是Java,那么应该选择传输客户端而不是 节点客户端,除非使用节点客户端获得的性能 它的大小足以保证额外的网络复杂性。 使用基准来验证性能增益

我认为这也会有用

PS:我将引用你的问题:

如果你们中有人使用过,请告诉我任何不适用的好处 可能使用rest

答案是性能。我意识到迁移确实令人头痛,但您需要决定对您来说更重要的是:支持还是性能。例如,Jest客户端比JavaAPI更具功能性,您可以轻松地扩展此功能。你赢得了支持,但失去了速度。阅读更多:

因此,如果您有几个运行不同版本的ES集群,那么 使用本机(或传输)客户端将是一个问题,您将 需要使用HTTP(我认为Jest是主要的选择)。如果版本控制 这不是问题,本机客户端将是您的最佳选择 集群感知


如果您使用的是java客户端,并且希望顺利升级,您可以按照下面的链接进行操作。我的解决方案是在这个包的帮助下用c#制作的:,您也可以尝试使用elastic团队提供的包。如果您希望动态索引与反射的使用相结合,我建议您使用第一种。Elasticsearch 5.0 Alpha正在改变其操作方式,以使用HTTP/REST客户端,而不是如此耦合的客户端。如果您对升级的需求不是很迫切,那么我认为等待ES5测试版发布几乎是值得的。我理解我们为什么要使用java客户端,但我的观点是,当我们升级到1.4.4到2.3.2时,发生了很多api更改,确定正确的库集也是一项挑战。在这种情况下,每次我们升级到新版本时,维护都将是一场噩梦,因为ES在每个版本中都发生了巨大的变化。@AtulPratapSingh请查看PS部分,非常感谢Vladislav Kysly