Bladeren bron

代码修改

LAPTOP-KB9HII50\70708 2 jaren geleden
bovenliggende
commit
26a7319b62

+ 10 - 20
starter/elasticsearch-starter/pom.xml

@ -10,7 +10,6 @@
    <modelVersion>4.0.0</modelVersion>
    <artifactId>elasticsearch-starter</artifactId>
    <version>2.4.0</version>
    <dependencies>
        <dependency>
@ -21,26 +20,20 @@
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${version.elasticsearch}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>${version.elasticsearch}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
            <version>7.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>${version.elasticsearch}</version>
            <version>7.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.6.2</version>
        </dependency>
        <dependency>
            <groupId>co.elastic.clients</groupId>
@ -55,20 +48,17 @@
        <dependency>
            <groupId>io.searchbox</groupId>
            <artifactId>jest</artifactId>
            <version>${version.jest}</version>
        </dependency>
        <dependency>
            <groupId>org.nlpcn</groupId>
            <artifactId>elasticsearch-sql</artifactId>
            <version>${version.elasticsearch-sql}</version>
            <version>7.8.0.1</version>
        </dependency>
<!--        <dependency>
            <groupId>com.sun.jna</groupId>
            <artifactId>jna</artifactId>
        </dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${version.fastjson}</version>
            <version>1.2.83</version>
        </dependency>
    </dependencies>

+ 1 - 1
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/ElasticSearch7Helper.java

@ -48,7 +48,7 @@ public class ElasticSearch7Helper {
    private Logger logger = LoggerFactory.getLogger(ElasticSearch7Helper.class);
    @Resource(name="esClient")
    @Resource(name="restHighLevelClient")
    private RestHighLevelClient restHighLevelClient;

+ 20 - 4
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/ElasticSearch7Pool.java

@ -1,5 +1,7 @@
package com.yihu.jw.elasticsearch;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.ElasticSearchDruidDataSourceFactory;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
@ -41,10 +43,14 @@ import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.sql.*;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
/**
@ -61,12 +67,12 @@ public class ElasticSearch7Pool {
    private String password;
    @SuppressWarnings("deprecation")
    @Bean(name="esClient")
    public RestHighLevelClient getClient() {
        String[] hosts = this.hosts.split(",");
    @Bean(name="restHighLevelClient")
    public RestHighLevelClient restHighLevelClient() {
        String[] hosts = this.hosts.split(",");;
        HttpHost[] httpHosts = new HttpHost[hosts.length];
        for(int i=0;i<hosts.length;i++) {
            httpHosts[i] = new HttpHost(hosts[i], 9200, "http");
            httpHosts[i] = HttpHost.create(hosts[i]);
        }
        //设置密码
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
@ -93,6 +99,16 @@ public class ElasticSearch7Pool {
        return client;
    }
    public ResultSet restHighLevelClientStream(String sql) throws Exception {
        Connection connection = DriverManager.getConnection("jdbc:es://http://172.26.0.56:9200","elastic","elastic");
        Statement statement = connection.createStatement();
        ResultSet resultSet =  statement.executeQuery(sql);
//        connection.close();
//        statement.close();
        return resultSet;
    }
    /**

+ 19 - 1
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/ElasticSearch7Util.java

@ -44,6 +44,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.sql.ResultSet;
import java.text.DecimalFormat;
import java.util.*;
@ -57,9 +58,14 @@ public class ElasticSearch7Util {
    private static final Logger logger = LoggerFactory.getLogger(ElasticSearch7Util.class);
    @Resource(name="esClient")
    @Resource(name="restHighLevelClient")
    private RestHighLevelClient restHighLevelClient;
    @Autowired
    private ResultSetUtil resultSetUtil;
    @Autowired
    private ElasticSearch7Pool elasticSearch7Pool;
    /**
     * 执行sql
@ -100,6 +106,16 @@ public class ElasticSearch7Util {
        return 0L;
    }
    public List<Map<String,Object>> executeSQLStream(String sql) throws Exception {
        ResultSet resultSet = elasticSearch7Pool.restHighLevelClientStream(sql);
        return resultSetUtil.resultToMapList(resultSet);
    }
    public <T> List<T> executeSQLStreamDO(String sql,Class<T> target) throws Exception {
        ResultSet resultSet = elasticSearch7Pool.restHighLevelClientStream(sql);
        return resultSetUtil.resultToEntity(resultSet,target);
    }
    /**
     * 执行sql
     */
@ -207,6 +223,8 @@ public class ElasticSearch7Util {
    public BoolQueryBuilder createQueryBuilderBySql(String sql) {
        BoolQueryBuilder boolQuery = null;
        try {
            SQLExprParser parser = new ElasticSqlExprParser(sql);
            SQLQueryExpr sqlExpr = (SQLQueryExpr) toSqlExpr(sql);
            SqlParser sqlParser = new SqlParser();
            MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) sqlExpr.getSubQuery().getQuery();

+ 56 - 4
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/TestEs7.java

@ -1,5 +1,11 @@
package com.yihu.jw.elasticsearch;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.Token;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
@ -7,11 +13,20 @@ import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.nlpcn.es4sql.domain.Where;
import org.nlpcn.es4sql.exception.SqlParseException;
import org.nlpcn.es4sql.parse.ElasticSqlExprParser;
import org.nlpcn.es4sql.parse.SqlParser;
import org.nlpcn.es4sql.parse.WhereParser;
import org.nlpcn.es4sql.query.maker.QueryMaker;
/**
 * Created by yeshijie on 2022/6/15.
@ -20,7 +35,7 @@ public class TestEs7 {
    public static void main(String[] args) throws Exception{
        String host = "172.26.0.56";
        String host = "127.0.0.1";
        String userName = "elastic";
        String password = "elastic";
@ -29,6 +44,7 @@ public class TestEs7 {
        for(int i=0;i<hosts.length;i++) {
            httpHosts[i] = new HttpHost(hosts[i], 9200, "http");
        }
        createQueryBuilderBySql("select * from ");
        //设置密码
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
@ -54,9 +70,45 @@ public class TestEs7 {
        String index = "body_health_data";
        GetIndexRequest request = new GetIndexRequest(index);
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
        /*GetIndexRequest request = new GetIndexRequest(index);
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);*/
        GetRequest getRequest = new GetRequest("body_health_data","1");
        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(documentFields);
    }
    public static BoolQueryBuilder createQueryBuilderBySql(String sql) {
        BoolQueryBuilder boolQuery = null;
        try {
            SQLQueryExpr sqlExpr = (SQLQueryExpr) toSqlExpr(sql);
            SqlParser sqlParser = new SqlParser();
            MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) sqlExpr.getSubQuery().getQuery();
            WhereParser whereParser = new WhereParser(sqlParser, query);
            Where where = whereParser.findWhere();
            if (where != null) {
                boolQuery = QueryMaker.explan(where);
            }
        } catch (SqlParseException e) {
//            logger.info("ReadES.createQueryBuilderByExpress-Exception,"+e.getMessage());
            e.printStackTrace();
        }
        return boolQuery;
    }
    /**
     * 验证sql
     *
     * @param sql sql查询语句
     * @return and (a=1 and b=1) or (c=1 and d=1)
     */
    private static SQLExpr toSqlExpr(String sql) {
        SQLExprParser parser = new ElasticSqlExprParser(sql);
        SQLExpr expr = parser.expr();
        if (parser.getLexer().token() != Token.EOF) {
            throw new ParserException("illegal sql expr : " + sql);
        }
        return expr;
    }
}

+ 0 - 2
starter/elasticsearch-starter/src/main/java/com/yihu/jw/elasticsearch/config/ElasticSearchConfig.java

@ -11,7 +11,6 @@ import javax.annotation.PostConstruct;
 * @date Created on 2017/12/1.
 */
//@ConfigurationProperties(prefix = "spring.elasticsearch")
@Configuration
public class ElasticSearchConfig {
    /**
@ -51,7 +50,6 @@ public class ElasticSearchConfig {
        this.clientTransportSniff = clientTransportSniff;
    }
    @PostConstruct
    private void configInfo() {
        StringBuilder info = new StringBuilder("{");
        info.append("\n  elasticsearch.cluster-name = " + clusterName);