java api方式

依赖

  1. <!--引入spring-data-es的依赖-->
  2. <dependency>
  3. <groupId>org.elasticsearch.client</groupId>
  4. <artifactId>transport</artifactId>
  5. <version>${elasticsearch.version}</version>
  6. </dependency>

配置

  1. @Configuration
  2. public class MyConfig {
  3. @Bean
  4. public TransportClient client() throws UnknownHostException {
  5. // 指定集群名,默认为elasticsearch,如果改了集群名,这里一定要加
  6. Settings settings = Settings.builder()
  7. .put("cluster.name", "elasticsearch")
  8. .build();
  9. TransportClient client = new PreBuiltTransportClient(settings);
  10. /*
  11. ES的TCP端口为9300,而不是之前练习的HTTP端口9200
  12. 这里只配置了一个节点的地址然添加进去,也可以配置多个从节点添加进去再返回
  13. */
  14. InetSocketTransportAddress node = new InetSocketTransportAddress(
  15. InetAddress.getByName("localhost"),
  16. 9300
  17. );
  18. client.addTransportAddress(node);
  19. return client;
  20. }
  21. }

使用

  1. @Autowired
  2. private TransportClient client;
  3. /**
  4. * 根据id查询
  5. *
  6. * @param id book id
  7. */
  8. @RequestMapping(value = "/book", method = RequestMethod.GET)
  9. public ResponseEntity<java.util.Map<String, Object>> get(@RequestParam("id") String id) {
  10. GetResponse result = client.prepareGet("book", "novel", id).get();
  11. return new ResponseEntity<>(result.getSource(), HttpStatus.OK);
  12. }

注意: 9300为tcp端口
9200为http端口

rest client方式

特点

基于http的客户端rest client,官网给出的restclient有java low level rest client和java hight level rest client,前者兼容所有版本的es,后者是基于前者开发的,只暴露了部分api,待完善。

  • 最小化依赖
  • 提供跨所有可用节点的负载均衡
  • 提供节点故障和特定响应代码时的故障转移
  • 提供失败重连惩罚机制(是否对一个连接失败的节点尝试重连,取决于它连续失败的次数,尝试重连且失败的次数越多,客户端在再次尝试重连这个节点时等的时间就越长)
  • 持久连接
  • 跟踪请求和响应的日志记录
  • 可选的集群节点自动发现功能

    依赖

    1. <dependency>
    2. <groupId>org.elasticsearch.client</groupId>
    3. <artifactId>elasticsearch-rest-client</artifactId>
    4. <version>6.4.0</version>
    5. </dependency>
    6. <!--引入json进行HTTP序列化-->
    7. <dependency>
    8. <groupId>org.json</groupId>
    9. <artifactId>json</artifactId>
    10. <version>20160810</version>
    11. </dependency>

    配置

    1. public RestClient getClient() throws Exception{
    2. RestClientBuilder clientBuilder = RestClient.builder(new Node());
    3. //请求头设置
    4. Header[] headers = {new BasicHeader("key","value")};
    5. clientBuilder.setDefaultHeaders(headers);
    6. // 设置超时时间,多次尝试同一请求时应该遵守的超时。默认值为30秒,与默认套接字超时相同。若自定义套接字超时,则应相应地调整最大重试超时
    7. clientBuilder.setMaxRetryTimeoutMillis(3000);
    8. //设置监听器
    9. clientBuilder.setFailureListener(new RestClient.FailureListener(){
    10. });
    11. //设置节点选择器,客户端以循环方式将每个请求发送到每一个配置的节点上
    12. //发送请求的节点,用于过滤客户端,将请求发送到这些客户端节点,默认向每个配置节点发送
    13. //这个配置通常是用户在启用嗅探时向专用主节点发送请求(即只有专用的主节点应该被HTTP请求命中)
    14. clientBuilder.setNodeSelector(NodeSelector.SKIP_DEDICATED_MASTERS);
    15. //配置http异步请求es的线程数 配置异步请求的线程数量,Apache Http Async Client默认启动一个调度程序线程,以及由连接管理器使用的许多工作线程
    16. //(与本地检测到的处理器数量一样多,取决于Runtime.getRuntime().availableProcessors()返回的数量)。线程数可以修改如下,
    17. //这里是修改为1个线程,即默认情况
    18. // 配置请求超时,将连接超时(默认为1秒)和套接字超时(默认为30秒)增加,
    19. // 这里配置完应该相应地调整最大重试超时(默认为30秒),即上面的setMaxRetryTimeoutMillis,一般于最大的那个值一致即60000
    20. //配置ES安全认证
    21. //配置通信加密
    22. return clientBuilder.build();
    23. }

    spring-data-es

    依赖

    1. <dependency>
    2. <groupId>org.springframework.data</groupId>
    3. <artifactId>spring-data-elasticsearch</artifactId>
    4. <version>3.0.10.RELEASE</version>
    5. </dependency>

    配置

    1. spring:
    2. data:
    3. elasticsearch:
    4. cluster-nodes: localhost:9300 # 配置IP及端口号
    5. cluster-name: elasticsearch
    6. # cluster-name: elasticsearch622 # 配置集群名,默认为elasticsearch,如果手动更改过,这里一定要指定
    7. # repositories:
    8. # enabled: true