分布式搜索 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 —— 节点实例化相关推荐
- 分布式搜索elasticsearch搜索功能【深入】
elasticsearch搜索功能[深入] 分布式搜索elasticsearch搜索功能[深入] 1.数据聚合 1.1 聚合的种类 1.2 DSL实现聚合 1.2.1 Bucket聚合 1.2.2 M ...
- 分布式搜索elasticsearch搜索功能【进阶】
elasticsearch搜索功能 分布式搜索elasticsearch搜索功能 1.DSL查询文档 1.1 DSL查询分类 1.2 全文检索查询 1.3 精准查询 1.4 地理坐标查询 1.5 组合 ...
- 黑马程序员--分布式搜索ElasticSearch学习笔记
写在最前 黑马视频地址:https://www.bilibili.com/video/BV1LQ4y127n4/ 想获得最佳的阅读体验,请移步至我的个人博客 SpringCloud学习笔记 消息队列M ...
- 分布式搜索elasticsearch 索引文档的增删改查 入门
分布式搜索elasticsearch 索引文档的增删改查 入门 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful ...
- 分布式搜索elasticsearch
为什么80%的码农都做不了架构师?>>> 介绍下es的几个概念: cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主 ...
- 分布式搜索elasticsearch配置文件详解
2019独角兽企业重金招聘Python工程师标准>>> elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml, ...
- .NET 分布式 搜索 elasticsearch.net NEST
我们公司(电商)目前使用 elasticsearch.对于一个3亿数据量索引查询速度都是在毫秒级别,不过实现都是基于JAVA的client. 本人因为是.NET出身,虽然现在做JAVA.但是对.NET ...
- 分布式搜索elasticsearch集群监控工具bigdesk
2019独角兽企业重金招聘Python工程师标准>>> bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索 ...
- 怎么配置linux中es搜索的主机名,分布式搜索elasticsearch中文分词集成
elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介 ...
最新文章
- 彻底解决_OBJC_CLASS_$_某文件名“, referenced from:问题
- 校园网站建设策划方案离不开三方面
- 题目1195:最长最短文本
- 【云上ELK系列】Logstash迁移Elasticsearch数据方法解读
- 【Nutch2.2.1基础教程之3】Nutch2.2.1配置文件
- [react] 状态管理器解决了什么问题?什么时候用状态管理器?
- 悦虎144固件,华强北二代悦虎144固件,1562M芯片144固件
- 高职计算机专业用什么软件,【计算机专业论文】高职计算机专业CAD软件教学思考(共4772字)...
- php 怎么解析文本,PHP解析自定义纯文本数据库
- 大数据_MapperReduce_Hbase的优化_RowKey设计原则---Hbase工作笔记0028
- 查询sql执行计划_使用SQL执行计划进行查询性能调整
- 如何退出while(cinvalue)的循环
- 【Linux学习】vim编辑器的使用
- linux安全加固-三级等保(一)
- Java基础——集合List+Set+泛型+Map
- 产品快速迭代的五大要点
- 批处理 获取计算机硬件信息,检测硬件的批处理命令,检测硬件bat,一键获取电脑硬件信息...
- 构建具有丰富功能的交互式 Kiosk
- 矩阵求和 c语言 简单易懂
- 一次ORA-3136的处理
热门文章
- appimage文件怎么安装_bauh:在一个界面中管理 Snap、Flatpak 和 AppImage | Linux 中国...
- 查询oracle表上重复的数据库,如何确定Oracle数据库表重复的记录
- 机器学习之 weka学习(四)
- iOS核心动画之CALayer(1)
- python 运行当前目录下的所有文件
- iOS开发 iOS10兼容访问http
- [邻接表] 学习邻接表的表示方法+BFS
- STL vector容器
- AntD 官网样例 InputRef报错原因
- vue3.0 AntDesignVue2.0 table的rowkey报错问题解决方法