【问题标题】:Elastic search java specific configuration弹性搜索java具体配置
【发布时间】:2015-09-27 12:26:16
【问题描述】:

我尝试通过 java api 访问 elasticserach 的本地实例。 根据elastic search doc,我可以使用“cluster.name”属性来指定要使用的集群的名称。完美的。 可悲的是,我不能指定要使用的节点名称吗?我可以看到这个也可以在configuration 中配置。 也许这是一个不好的做法? 另外,我可以看到here 我可以定义一个自定义服务 ID,但是如何将它指定给我的 java 传输客户端?

非常感谢您的帮助。

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    Elasticsearch 的全部意义在于创建一个高度可用的数据集群。并非所有节点都包含所有数据,并且并非所有节点都可能一直处于运行状态。如果您想通过指定其名称来连接到单个节点并且由于某种原因该节点已关闭(它已被杀死,正在升级,正在重新配置,数据被擦除以重新编制索引等),那么您的客户端将无法运行查询并获得结果。

    相反,如果您连接到集群,ES 将确保将您的查询路由到启动的集群节点,无论某些节点的状态可能是关闭的。因此,最佳做法是始终通过cluster.name 进行连接,以充分利用您的 ES 集群。

    至于 `SERVICE_ID,它不是您在代码中指定的东西,它只是您想在 Windows 上运行时为 Elasticsearch 服务指定的名称。

    【讨论】:

    • 谢谢,但我知道,我没有在弹性搜索配置中指定默认节点名称的意义吗?我应该让 ES 定义它的默认节点名称(奇迹人物)吗?如果我们不必使用该属性,人们会在哪些用例中使用它?
    • 对于服务ID,我认为它允许我在一台机器上启动多个ES实例并识别它们。所以我认为我的代码会指定它连接到好的实例。如果我不指定这个我的 ES 客户端如何知道要连接到哪个实例?也许它是我们连接的端口?如果我在这一点上是对的,那么我可能直到现在才明白,我让默认的“elasticsearch.yml”来配置不同服务 ID 的实例。对于 ES 实例 XXX,我必须创建一个 XXX.yml 吗?非常感谢。
    • 指定节点名称只是为了更好地识别它们。不是每个人都知道 Marvel 角色是什么以及他们识别哪些节点。
    • 好的,谢谢,所以我不碰节点名称。关于服务ID,我是否认为我必须根据服务ID定义一个yml文件?
    • 好吧,我对这一点有误解,我想现在可以了:如果我想在一台服务器上拥有多个 ES 实例,我将有几个 elasticsearch "Homes",每个都有它的配置文件,以便我为每个定义不同的集群名称/端口。 PS:我不知道为什么,但是“transport.tcp.port”参数没有在 ES 文档中指定,但是非常有用,因为它是我们必须连接我们的 java 客户端的那个(可能对 nexts 有用;-))
    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2018-02-01
    • 2017-11-19
    相关资源
    最近更新 更多