2015-09-26 85 views
0

我尝试通过java api访问elasticserach的本地实例。 根据elastic search doc,我可以使用“cluster.name”属性来指定要使用的集群的名称。完善。 很遗憾,我不能指定要使用的节点名称?我可以看到,这个也可以在configuration中配置。 也许这是一个坏习惯?? 此外,我可以看到here,我可以定义一个自定义服务ID,但是如何将其指定给我的java传输客户端?弹性搜索java特定配置

非常感谢您的帮助。

回答

1

Elasticsearch的重点在于创建一个高度可用的数据集群。并非所有节点都包含所有数据,并且并非所有节点都可能一直处于运行状态。如果你想连接到一个单一的节点,通过指定它的名字,并由于某种原因该节点已关闭(它已被杀死,它正在升级,它正在重新设置,数据被抹去重新索引,等),然后你的客户端将无法运行查询并获得结果。

相反,如果连接到集群,ES将确保将查询路由到正在运行的集群节点,而不管某些可能关闭的节点的状态如何。所以最佳做法是始终通过cluster.name进行连接,以充分利用ES群集。

至于SERVICE_ID,它不是您在代码中指定的内容,它仅仅是您在Windows上运行时要提供给Elasticsearch服务的名称。

+0

谢谢,但知道,我没有得到在我的弹性搜索配置中指定默认节点名称的重点?我应该让ES定义它的默认节点名称(奇迹字符)吗?如果我们不需要使用它,那么用户会使用这个属性? – Etienne

+0

对于服务ID,我认为它允许我在一台机器上启动几个ES实例并识别它们。所以我想我的代码会指定它连接到好的实例。如果我没有指定我的ES客户端如何知道要连接哪个实例?也许这是我们连接的端口?如果我在这一点上是正确的,那么可能有些东西我不明白,直到现在我让默认的“elasticsearch.yml”来配置不同服务ID的实例。对于ES实例XXX,我必须创建一个XXX.yml吗? 非常感谢。 – Etienne

+0

指定节点名称仅用于更好地识别它们。不是每个人都知道奇迹字符是什么以及他们识别哪个节点。 – Val