Elasticsearch学习篇第三章:Elasticsearc
2020-09-12 本文已影响0人
thinking2019
elasticsearch的囊括了很多东西,有分析器、插件、语法、数据组成等等部分,但是我还是很想先看看在Java方面的实际应用,毕竟还是需要实践中使用的,至于其他部分会整理分类地总结出来
其实我写的都不是我官网文档、实验出来的,而是由很多篇文章整理归纳出来的,不知道算不算抄袭,绝对不会完全相同的复制粘贴,总结归纳也是一种学习方式
TransportClient
TransportClient可以支持2.x,5.x版本,TransportClient将会在Elasticsearch 7.0弃用并在8.0中完成删除,使用HTTP请求而不是Java序列化请求
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>7.9.1</version>
</dependency>
public TransportClient transportClient() {
TransportClient transportClient = null;
try {
// 配置信息
Settings esSetting = Settings.builder()
.put("cluster.name", clusterName) //集群名字
.put("client.transport.sniff", true)//增加嗅探机制,找到ES集群
.put("thread_pool.search.size", Integer.parseInt(poolSize))//增加线程池个数,暂时设为5
.build();
//配置信息Settings自定义
transportClient = new PreBuiltTransportClient(esSetting);
TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port));
transportClient.addTransportAddresses(transportAddress);
} catch (Exception e) {
log.error("elasticsearch TransportClient create error!!", e);
}
return transportClient;
}
RestClient
包含Java High Level REST Client
ElasticsearchTemplate和ElasticsearchRestTemplate实现ElasticsearchOperations接口
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
@Bean
public RestHighLevelClient elasticsearchClient(){
//获取es连接(不需要密码可以直接连接)
//private RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient
// .builder(new HttpHost(hostname, port, protocol)));
// 账号密码
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(username, password));
// 初始化
RestClientBuilder builder = RestClient.builder(hostList.toArray(new HttpHost[0]));
// 异步httpclient连接延时配置
builder.setRequestConfigCallback(new RequestConfigCallback() {
@Override
public Builder customizeRequestConfig(Builder requestConfigBuilder) {
requestConfigBuilder.setConnectTimeout(connectTimeOut);
requestConfigBuilder.setSocketTimeout(socketTimeOut);
requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
return requestConfigBuilder;
}
});
// 异步httpclient连接数配置
builder.setHttpClientConfigCallback(new HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
httpClientBuilder.setMaxConnTotal(maxConnectNum);
httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
return httpClientBuilder;
}
});
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
Jest
Jest是Java社区开发的,是Elasticsearch的Java Http Rest客户端,一定延迟
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>6.3.1</version>
</dependency>
@Bean
public JestClient getJestClient(){
List<String> uris = Arrays.asList(url.split(","));
JestClientFactory jestClientFactory = new JestClientFactory();
jestClientFactory.setHttpClientConfig(new HttpClientConfig
.Builder(uris)
.connTimeout(10000)
.readTimeout(10000)
.maxConnectionIdleTime(1500L, TimeUnit.MILLISECONDS)
.multiThreaded(true)
.build());
return jestClientFactory.getObject();
}
Spring Data Elasticsearch
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
public interface ItemRepository extends ElasticsearchRepository<Item,Long> {}
项目地址
https://gitee.com/hzy100java/springboot-elasticsearch.git
除了这些方法外,应该还有query的查询条件组装、QueryDsl方法
下次写elasticsearch的可视化和QueryDsl