日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式搜索 Elasticsearch —— 节点实例化

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式搜索 Elasticsearch —— 节点实例化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

要連接到集群,首先要告訴集群:你是誰,你有什么特征。在 ES 中體現為實例化節點。

ES 通過 org.elasticsearch.node.NodeBuilder 的 build() 或者 node() 方法實例化節點,build() 創建節點而不啟動,而 node() 方法等價于 build().start() ,即 創建并啟動。

?

首先實例化 NodeBuilder ,有兩種方式,第一種是 new, 如下:

NodeBuilder nodeBuilder = new NodeBuilder();

?

第二種使用 NodeBuilder 的工廠方法,NodeBuilder 中有以下方法

public static NodeBuilder nodeBuilder(){return new NodeBuilder(); }

所以可以直接通過以下代碼實例化 NodeBuilder:

NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder();

實例化后便可設置該 node 的特性,NodeBuilder 本身自帶了一些方法:

1、loadConfigSettings ,是否家在配置文件。

你可以在 classpathx 下 創建一個 elasticsearch.yml 文件,然后再其中設置一些屬性(參見分布式搜索Elasticsearch——配置)?,再把 loadConfigSettings 的值設置為 true 即可,代碼如下

NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().loadConfigSettings(true);

loadConfigSettings 默認為 true.

2、是否只作為客戶端,即不存儲索引數據,默認值為false 代碼如下所示:

NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().client(true);

3、是否持有索引數據,默認值為 true,代碼如下所示:

NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true);

client(boolean) 和 data(boolean) 是有一定關聯的,

當 client 為 true 時候, data 默認值為 false,且不能改為 true,否則會報錯。

當 client 為 false 時候,data 默認值為 true,而且改為 false 也不起作用,也就是下面代碼等價:

NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(true).client(false); NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().data(false).client(false);

?4、是否為 本地節點,本地節點是指在 JVM 級別中的統計,當多個節點使用同一個 JVM 時,這些節點可以組合成一個集群,而非同一個 JVM 下的節點則不處于集群中,默認值為 false:

NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().local(true);

5、設置集群名,即該節點位于哪個集群下,默認值elasticsearch:

NodeBuilder nodeBuilder = NodeBuilder.nodeBuilder().clusterName(your name");

若多個節點設置了同一個 clusterName,則說明這幾個節點位于同一個集群下。

6、以 Map 的方式設置屬性,NodeBuilder 中有以下兩個方法:

????

/*** Explicit node settings to set*/ public NodeBuilder settings(Settings.Builder settings){return settings(settings.build()); }/*** Explicit node settings set*/ public NodeBuilder settings(Settings settings){this.settings.put(settings);return this; }

這兩個方法允許通過 Map 的方法設置屬性,如下代碼所示:

Map<String,String> settingsMap = new HashMap<String,String>(); settingsMap.put("node.client","false"); settingsMap.put("node.data","true"); settingsMap.put("node.local","true"); settingsMap.put("cluster.name","clusterName"); settingsMap.put("node.name","geloin");Settings settings = ImmutableSettings.settingsBuilder().put(settingsMap).build(); Node node = NodeBuilder.nodeBuilder().settings(settings).node();

org.elasticsearch.common.settings.Settings 是一個接口,

org.elasticsearch.common.settings.ImmutableSettings 才是它的實現類。

上一篇文章?分布式搜索 Elasticsearch —— 配置?說了一些 ES 的配置,可以在上述的代碼中的 map 中設置。

?

綜上所述,我們對設置 Node 的屬性有以下結論:

1、使用配置文件,即在 classpath 下建立 elasticsearch.yml 文件,然后把?分布式搜索 Elasticsearch —— 配置?李曼提到的配置加入到此文件中,再保持 loadConfigSettings為 true 即可;

2、使用 Map 方式,然后用 ?NodeBuilder.nodeBuilder().settings(settings);

3、使用 NodeBuilder 自帶了 client 、data、local、clusterName 方法,不過 NodeBuilder 自帶方法有限,所以可能還需要配合以上提到的兩種方式才能達到要求。

轉載于:https://my.oschina.net/exit/blog/805163

總結

以上是生活随笔為你收集整理的分布式搜索 Elasticsearch —— 节点实例化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。