springboot连接ElasticSearch
一、依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.2</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.15.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.15.2</version>
</dependency>
注意:使用上述依赖后没有自己需要的功能,提升版本号,但是版本号要对应
二、配置
1、
spring:
elasticsearch:
rest:
uris: 192.168.2.205:9200 #es服务器地址和端口
2、
management:
health:
elasticsearch:
enabled: false #关闭Es健康监测 不建议 或者使用下面配置
management:
endpoints:
web:
exposure:
include: ['*']
health:
elasticsearch:
response-timeout: 3s
通过以上依赖和配置就可以成功连接ES。
三、代码中使用
@Autowired
private RestHighLevelClient restHighLevelClient;
SearchHits hits = restHighLevelClient.search(request, RequestOptions.DEFAULT).getHits();
Jfinal连接ElasticSearch
一、依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.2</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.15.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.15.2</version>
</dependency>
二、配置
#ES配置
elasticsearch_ip = 192.168.5.209 #ES的http客户端ip
elasticsearch_port = 9200 #port
elasticsearch_user = user
elasticsearch_pwd = Jt484848
cluster_name = jt-platform #浏览器输入ip+port可得
三、增加ES插件
import java.io.IOException;
import java.util.List;
import org.apache.http.HttpHost;
import org.elasticsearch.client.Node;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
import com.jfinal.plugin.IPlugin;
public class ElasticSearchPlugin implements IPlugin {
private static final Logger logger = LoggerFactory.getLogger(ElasticSearchPlugin.class);
private String ip;
private int port;
private String clusterName;
private static RestClientBuilder builder;
private static RestClient restClient;
private static RestHighLevelClient restHighLevelClient;
private static RequestOptions options = RequestOptions.DEFAULT;
public ElasticSearchPlugin(String ip,int port,String clusterName){
this.ip = ip;
this.port = port;
this.clusterName = clusterName;
}
public static RestHighLevelClient getHighLevelClient(){
return restHighLevelClient;
}
public static RestClient getClient() {
return restClient;
}
public static RequestOptions getRequestOptions(){
options = RequestOptions.DEFAULT;
return options;
}
#情况一:无密码连接
@Override
public boolean start() {
/**
* 这里的连接方式指的是没有安装x-pack插件,如果安装了x-pack则参考{@link ElasticsearchXPackClient}
* 1. java客户端的方式是以tcp协议在9300端口上进行通信
* 2. http客户端的方式是以http协议在9200端口上进行通信
*/
try {
builder = RestClient.builder(new HttpHost(this.ip, this.port));
restClient = builder.build();
restHighLevelClient = new RestHighLevelClient(builder);
List<Node> nodes = restClient.getNodes();
if (nodes.isEmpty()) {
logger.info("No NODES Connected");
}else {
for (Node node : nodes){
logger.info("节点信息:"+node.getHost());
}
}
logger.info("ElasticsearchClient 连接成功,节点包括:"+ JSON.toJSON(restHighLevelClient.getLowLevelClient()));
} catch (Exception e) {
logger.info(e.getMessage());
}
return true;
}
情况二:有密码连接
@Override
public boolean start() {
/**
* 这里的连接方式指的是没有安装x-pack插件,如果安装了x-pack则参考{@link ElasticsearchXPackClient}
* 1. java客户端的方式是以tcp协议在9300端口上进行通信
* 2. http客户端的方式是以http协议在9200端口上进行通信
*/
try {
final CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
//配置用户名、密码
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(p.get("elasticsearch_user"), p.get("elasticsearch_pwd")));
builder = RestClient.builder(new HttpHost(this.ip, this.port));
builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback(){
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
//线程设置
httpAsyncClientBuilder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(10).build());
return httpAsyncClientBuilder;
}
});
restClient = builder.build();
restHighLevelClient = new RestHighLevelClient(builder);
List<Node> nodes = restClient.getNodes();
if (nodes.isEmpty()) {
logger.info("No NODES Connected");
}else {
for (Node node : nodes){
logger.info("节点信息:"+node.getHost());
}
}
logger.info("ElasticsearchClient 连接成功,节点包括:"+ JSON.toJSON(restHighLevelClient.getLowLevelClient()));
} catch (Exception e) {
logger.info(e.getMessage());
}
return true;
}
@Override
public boolean stop() {
if (restHighLevelClient != null){
try {
restHighLevelClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (restClient != null){
try {
restClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
}
三、代码中使用
#无需注入,直接使用ElasticSearchPlugin.getHighLevelClient()获取即可
SearchResponse search = ElasticSearchPlugin.getHighLevelClient().search(req, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();