你好,
也许我对弹性搜索的内部缺乏一些了解。我想做的是创建一个嵌入式 ES 节点,但在我的应用程序的多个启动中保持索引的持久性。
这是我的启动代码(在每次应用程序启动时执行):
Node node = nodeBuilder().build().start();
然后我做一些索引/查询,有时,应用程序会停止。现在,如果我重新启动应用程序,我的所有数据都会丢失,并且将在文件系统上创建一个新的空节点。
是否可以使用 Java API 重用以前创建的节点及其数据?
你好,
也许我对弹性搜索的内部缺乏一些了解。我想做的是创建一个嵌入式 ES 节点,但在我的应用程序的多个启动中保持索引的持久性。
这是我的启动代码(在每次应用程序启动时执行):
Node node = nodeBuilder().build().start();
然后我做一些索引/查询,有时,应用程序会停止。现在,如果我重新启动应用程序,我的所有数据都会丢失,并且将在文件系统上创建一个新的空节点。
是否可以使用 Java API 重用以前创建的节点及其数据?
我刚刚找到了解决我的问题的方法:可以在设置中设置节点的名称。如果这样做,节点及其数据将在重新启动时重新使用。
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();
您的实现会创建一个“透明”节点,直到程序关闭。
为了使事情独立,您必须从这里下载弹性搜索服务器。它实际上会将节点保留在硬盘中,并提供一个 api 供您访问它们。
话虽如此,您必须使用TransportClient()将您的 java 应用程序与您的服务器连接起来。所有信息都将保存在弹性搜索服务器中,因此许多客户端都可以访问。您甚至可以使用 curl 查询您的服务器。