java api方式
依赖
<!--引入spring-data-es的依赖--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>${elasticsearch.version}</version></dependency>
配置
@Configurationpublic class MyConfig {@Beanpublic TransportClient client() throws UnknownHostException {// 指定集群名,默认为elasticsearch,如果改了集群名,这里一定要加Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();TransportClient client = new PreBuiltTransportClient(settings);/*ES的TCP端口为9300,而不是之前练习的HTTP端口9200这里只配置了一个节点的地址然添加进去,也可以配置多个从节点添加进去再返回*/InetSocketTransportAddress node = new InetSocketTransportAddress(InetAddress.getByName("localhost"),9300);client.addTransportAddress(node);return client;}}
使用
@Autowiredprivate TransportClient client;/*** 根据id查询** @param id book id*/@RequestMapping(value = "/book", method = RequestMethod.GET)public ResponseEntity<java.util.Map<String, Object>> get(@RequestParam("id") String id) {GetResponse result = client.prepareGet("book", "novel", id).get();return new ResponseEntity<>(result.getSource(), HttpStatus.OK);}
rest client方式
特点
基于http的客户端rest client,官网给出的restclient有java low level rest client和java hight level rest client,前者兼容所有版本的es,后者是基于前者开发的,只暴露了部分api,待完善。
- 最小化依赖
- 提供跨所有可用节点的负载均衡
- 提供节点故障和特定响应代码时的故障转移
- 提供失败重连惩罚机制(是否对一个连接失败的节点尝试重连,取决于它连续失败的次数,尝试重连且失败的次数越多,客户端在再次尝试重连这个节点时等的时间就越长)
- 持久连接
- 跟踪请求和响应的日志记录
-
依赖
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>6.4.0</version></dependency><!--引入json进行HTTP序列化--><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20160810</version></dependency>
配置
public RestClient getClient() throws Exception{RestClientBuilder clientBuilder = RestClient.builder(new Node());//请求头设置Header[] headers = {new BasicHeader("key","value")};clientBuilder.setDefaultHeaders(headers);// 设置超时时间,多次尝试同一请求时应该遵守的超时。默认值为30秒,与默认套接字超时相同。若自定义套接字超时,则应相应地调整最大重试超时clientBuilder.setMaxRetryTimeoutMillis(3000);//设置监听器clientBuilder.setFailureListener(new RestClient.FailureListener(){});//设置节点选择器,客户端以循环方式将每个请求发送到每一个配置的节点上//发送请求的节点,用于过滤客户端,将请求发送到这些客户端节点,默认向每个配置节点发送//这个配置通常是用户在启用嗅探时向专用主节点发送请求(即只有专用的主节点应该被HTTP请求命中)clientBuilder.setNodeSelector(NodeSelector.SKIP_DEDICATED_MASTERS);//配置http异步请求es的线程数 配置异步请求的线程数量,Apache Http Async Client默认启动一个调度程序线程,以及由连接管理器使用的许多工作线程//(与本地检测到的处理器数量一样多,取决于Runtime.getRuntime().availableProcessors()返回的数量)。线程数可以修改如下,//这里是修改为1个线程,即默认情况// 配置请求超时,将连接超时(默认为1秒)和套接字超时(默认为30秒)增加,// 这里配置完应该相应地调整最大重试超时(默认为30秒),即上面的setMaxRetryTimeoutMillis,一般于最大的那个值一致即60000//配置ES安全认证//配置通信加密return clientBuilder.build();}
spring-data-es
依赖
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId><version>3.0.10.RELEASE</version></dependency>
配置
spring:data:elasticsearch:cluster-nodes: localhost:9300 # 配置IP及端口号cluster-name: elasticsearch# cluster-name: elasticsearch622 # 配置集群名,默认为elasticsearch,如果手动更改过,这里一定要指定# repositories:# enabled: true
