jfinal和springboot连接ElasticSearch详解

116 阅读2分钟

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();