【问题标题】:Elasticsearch Java API: Create amd reuse nodeElasticsearch Java API:创建 amd 重用节点
【发布时间】:2015-07-16 11:46:58
【问题描述】:

嗨,

也许我对弹性搜索的内部缺乏一些了解。我想做的是创建一个嵌入式 ES 节点,但在我的应用程序的多个启动中保持索引持久。

这是我的启动代码(在每次应用程序启动时执行):

Node node = nodeBuilder().build().start();

然后我做一些索引/查询,有时,应用程序会停止。现在,如果我重新启动应用程序,我的所有数据都会丢失,并且会在文件系统上创建一个新的空节点。

是否可以使用 Java API 重用以前创建的节点及其数据?

【问题讨论】:

    标签: java elasticsearch elasticsearch-java-api


    【解决方案1】:

    在程序关闭之前,您的实现会创建一个“透明”节点。

    为了让事情独立,你必须从here下载弹性搜索服务器。它实际上会将节点保存在硬盘中,并提供一个 api 供您访问它们。

    话虽如此,您必须使用TransportClient() 将您的Java 应用程序与您的服务器连接起来。 所有信息都将保存到弹性搜索服务器,因此许多客户端都可以访问。你甚至可以query your server with curl

    【讨论】:

    • 好的,这样就不能自己管理服务器了?那太好了,因为我只需要对这个应用程序进行弹性搜索。通过代码控制它将使部署更加简单。我想知道为什么我的实现仍然将状态保留在文件系统中......
    【解决方案2】:

    我刚刚找到了解决我的问题的方法:可以在设置中设置节点的名称。如果这样做,节点及其数据将在重新启动时重复使用。

    ImmutableSettings.Builder settings
                = ImmutableSettings.builder();
    settings.put("node.name", "nameOfTheNode"); // set the name to reuse the node
    settings.put("path.data", "/opt/elasticsearch/data"); // the data will be stored in this folder
    
    Node node = NodeBuilder.nodeBuilder()
            .settings(settings)
            .clusterName("nameOfTheCluser")
            .data(true) // make the node store data
            .node()
            .start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-07
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 2021-07-22
      • 2015-10-11
      相关资源
      最近更新 更多