From 89c6ab34038a374797bba5dbc057c9254b0c8752 Mon Sep 17 00:00:00 2001 From: cloudAndMonkey Date: Wed, 14 Dec 2022 09:13:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?apijson=E6=94=AF=E6=8C=81elasticsearch=20ty?= =?UTF-8?q?pe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/README.md b/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/README.md index 0e61dbb9..f6728065 100644 --- a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/README.md +++ b/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/README.md @@ -1,6 +1,6 @@ # APIJSONDemo -## 1、支持多数据源 +## 支持多数据源 数据源解析顺序: @@ -48,21 +48,25 @@ ![image](https://user-images.githubusercontent.com/12228225/207245545-277ba9a6-e87f-42b3-af55-9d6a37384a1e.png) -## 2、集成elasticsearch-sql +## 集成elasticsearch-sql 换成xpack, 也一样 应用导入: elasticsearch-sql-7.17.5.0.jar -## 3、apijson支持elasticsearch功能点 +## apijson elasticsearch type支持 + +APIJSONSQLConfig.*TABLE_KEY_MAP*.put("ES_blog", "es_blog/doc"); + +## apijson支持elasticsearch功能点 新增、修改、删除、查询 -## 4、elasticsearch-sql不支持RLIKE +## elasticsearch-sql不支持RLIKE ![image](https://user-images.githubusercontent.com/12228225/207245701-ea2560a9-2389-4953-a568-9e85adfb15ad.png) -## 5、apijson支持字段 .keyword +## apijson支持字段 .keyword ``` { @@ -81,7 +85,7 @@ -## 4、示例 +## 示例 ### 单条插入 From 052fbc840be2cba793d0bb9096444aae07e84c6a Mon Sep 17 00:00:00 2001 From: cloudAndMonkey Date: Wed, 14 Dec 2022 09:15:22 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E6=95=88?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/apijson/demo/DemoFunctionParser.java | 32 ------------------- .../apijson/demo/DynamicJdbcDataSource.java | 1 - 2 files changed, 33 deletions(-) diff --git a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DemoFunctionParser.java b/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DemoFunctionParser.java index ba5d230b..92e729c7 100644 --- a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DemoFunctionParser.java +++ b/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DemoFunctionParser.java @@ -77,43 +77,11 @@ public void pwdEncrypt(@NotNull JSONObject current, @NotNull String id, @NotNull current.put(password, c_password + "_" + System.currentTimeMillis()); } - /*** - * 业务表-插入不同表1:n
- * 业务表-批量修改不同表1:n
- * 测试 子表 前置函数调用,修改值是否成果
- * user_address 表 addr字段 - * - * @param current - * @param password - * @return - * @throws Exception - */ public void childFunTest(@NotNull JSONObject current, @NotNull String addr) throws Exception { String c_addr = current.getString(addr); current.put(addr, c_addr + "_" + System.currentTimeMillis()); } - /*** - * 没有在外层事物里面 - * - * @throws Exception - */ -// private void insertTest() throws Exception { -// String json = "{\n" + " \"User\":{\n" + " \"username\":\"test\",\n" -// + " \"password\": \"233223\",\n" + " \"state\": 1\n" + " },\n" + " \"tag\": \"User\"\n" -// + "}"; -// com.alibaba.fastjson.JSONObject requestObject = AbstractParser.parseRequest(json); -// JSONResponse response = new JSONResponse(new FormParser(POST, false).parseResponse(requestObject)); -// log.info(response.toJSONString()); -// } -// -// private void selectTest() throws Exception { -// String json = "{\n" + " \"User\": {\n" + " \"id\": \"4732209c-5785-4827-b532-5092f154fd94\"\n" -// + " },\n" + " \"tag\": \"User\"\n" + "}"; -// com.alibaba.fastjson.JSONObject requestObject = AbstractParser.parseRequest(json); -// JSONResponse response = new JSONResponse(new FormParser(GET, false).parseResponse(requestObject)); -// log.info(response.toJSONString()); -// } public void removeKeys(@NotNull JSONObject current, String keys) { String[] ks = StringUtil.split(keys, ";"); // 用分号 ; 分割 diff --git a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DynamicJdbcDataSource.java b/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DynamicJdbcDataSource.java index 0a461c59..1e7f3286 100644 --- a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DynamicJdbcDataSource.java +++ b/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/DynamicJdbcDataSource.java @@ -40,7 +40,6 @@ * 1、应用启动添加数据源 * 2、页面动态添加数据源(数据库存储数据源信息) * - * @author xy * */ @Data From 9b28004255b3592943c7e531cc1636e38375fec2 Mon Sep 17 00:00:00 2001 From: cloudAndMonkey Date: Wed, 14 Dec 2022 09:16:31 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apijson/demo/ElasticSearchSqlTest.java | 233 ------------------ 1 file changed, 233 deletions(-) delete mode 100644 APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/ElasticSearchSqlTest.java diff --git a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/ElasticSearchSqlTest.java b/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/ElasticSearchSqlTest.java deleted file mode 100644 index 641deef5..00000000 --- a/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Elasticsearch/src/main/java/apijson/demo/ElasticSearchSqlTest.java +++ /dev/null @@ -1,233 +0,0 @@ -package apijson.demo; - -import static com.alibaba.druid.pool.DruidDataSourceFactory.PROP_CONNECTIONPROPERTIES; -import static com.alibaba.druid.pool.DruidDataSourceFactory.PROP_URL; - -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.util.Properties; - -import javax.sql.DataSource; - -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; -import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse; -import org.elasticsearch.client.RequestOptions; -import org.elasticsearch.client.RestClient; -import org.elasticsearch.client.RestClientBuilder; -import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.client.transport.TransportClient; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.transport.TransportAddress; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.index.query.WrapperQueryBuilder; -import org.elasticsearch.index.reindex.BulkByScrollResponse; -import org.elasticsearch.index.reindex.DeleteByQueryAction; -import org.elasticsearch.index.reindex.DeleteByQueryRequestBuilder; -import org.elasticsearch.index.reindex.UpdateByQueryRequest; -import org.elasticsearch.script.Script; -import org.elasticsearch.transport.client.PreBuiltTransportClient; -import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient; -import org.junit.Test; -import org.nlpcn.es4sql.SearchDao; -import org.nlpcn.es4sql.domain.Where; -import org.nlpcn.es4sql.exception.SqlParseException; -import org.nlpcn.es4sql.parse.SqlParser; -import org.nlpcn.es4sql.parse.WhereParser; -import org.nlpcn.es4sql.query.ESActionFactory; -import org.nlpcn.es4sql.query.SqlElasticRequestBuilder; -import org.nlpcn.es4sql.query.maker.QueryMaker; - -import com.alibaba.druid.pool.DruidDataSource; -import com.alibaba.druid.pool.ElasticSearchDruidDataSourceFactory; -import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; -import com.alibaba.druid.sql.parser.SQLStatementParser; -import com.alibaba.fastjson.JSONObject; - -import apijson.StringUtil; -import lombok.extern.slf4j.Slf4j; - -/*** - * - * @author xy - * - */ -@Slf4j -public class ElasticSearchSqlTest { - - public static void main(String[] args) throws Exception { - Properties properties = new Properties(); - properties.put(PROP_URL, "jdbc:elasticsearch://127.0.0.1:9302"); - properties.put(PROP_CONNECTIONPROPERTIES, "client.transport.ignore_cluster_name=true"); - DruidDataSource dds = (DruidDataSource) ElasticSearchDruidDataSourceFactory.createDataSource(properties); - Connection connection = dds.getConnection(); - // SELECT count(*) as count FROM es_blog - PreparedStatement ps = connection.prepareStatement("SELECT count, count(*) as total FROM es_blog/dd group by count"); - ResultSet resultSet = ps.executeQuery(); - while (resultSet.next()) { - System.out.println(resultSet.getObject("count") + ";" + resultSet.getObject("total")); - } - - ps.close(); - connection.close(); - dds.close(); - } - - /** - * 将sql语句转换未dsl语句 - * - * @throws Exception - * @throws SqlParseException - */ - @Test - public void sqlExplainTest() throws Exception, SqlParseException { - String sql = "SELECT count, count(*) as total FROM es_blog group by count"; - String explain = explain(sql); - log.info("explain:{}", explain); - } - - private String explain(String sql) throws Exception { - // 获取client - Settings settings = Settings.builder().put("cluster.name", "docker-cluster").build(); - TransportClient transportClient = new PreBuiltTransportClient(settings); - transportClient.addTransportAddress(getTransportAddress()); - SearchDao searchDao = new SearchDao(transportClient); - SqlElasticRequestBuilder requestBuilder = searchDao.explain(sql).explain(); - return requestBuilder.explain(); - } - - String TEST_INDEX = "es_blog"; - - /*** - * 非jdbc方式 实现delete - * - * @throws Exception - * @throws SqlParseException - */ - @Test - public void deleteTest() throws Exception, SqlParseException { - // String deleteStatement = "delete from " + TEST_INDEX +" where title.keyword = - // \"Linux安装\""; - String deleteStatement = "DELETE FROM es_blog WHERE id IN ('c7890a84-1b3c-464d-9c40-9d2cf5a1d292','322323') "; - // String deleteStatement = "DELETE FROM es_blog WHERE title.keyword = 'test-3' - // and count = 3"; -// String deleteStatement = "DELETE FROM es_blog WHERE title.keyword like 'test%'"; - // 获取client - Settings settings = Settings.builder().put("client.transport.ignore_cluster_name", true).build(); - TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(getTransportAddress()); - NodesInfoResponse nodeInfos = client.admin().cluster().prepareNodesInfo().get(); - String clusterName = nodeInfos.getClusterName().value(); - log.info(String.format("Found cluster... cluster name: %s", clusterName)); - SearchDao searchDao = new SearchDao(client); - client.admin().indices().prepareRefresh(TEST_INDEX + "*").get(); - - // searchDao.explain(deleteStatement).explain().get(); - - SqlElasticRequestBuilder requestBuilder = searchDao.explain(deleteStatement).explain(); - log.info("sql explain: {}", requestBuilder.explain()); - BulkByScrollResponse reponse = (BulkByScrollResponse) requestBuilder.get(); - searchDao.getClient().admin().indices().prepareRefresh(TEST_INDEX).get(); - } - - protected static TransportAddress getTransportAddress() throws UnknownHostException { - String host = "47.108.49.213"; - String port = "9301"; - return new TransportAddress(InetAddress.getByName(host), Integer.parseInt(port)); - } - - protected static TransportAddress getHttpTransportAddress() throws UnknownHostException { - String host = "47.108.49.213"; - String port = "9201"; - return new TransportAddress(InetAddress.getByName(host), Integer.parseInt(port)); - } - - - @Test - public void delete() throws Exception { - deleteQuery(TEST_INDEX, null); - } - - public static void deleteQuery(String indexName, String typeName) throws Exception { - // 获取client -// Settings settings = Settings.builder().put("cluster.name", "docker-cluster").build(); -// TransportClient client = new PreBuiltTransportClient(settings); - Settings settings = Settings.builder().put("cluster.name", "docker-cluster") - // 设置xpack权限用户 - .put("xpack.security.user", "elastic:ztzh@smart666") - .put("xpack.security.transport.ssl.enabled",false)//设置xpack权限用户 - .put("client.transport.sniff", true) - .build(); - TransportClient client = new PreBuiltXPackTransportClient(settings); - client.addTransportAddress(getTransportAddress()); - DeleteByQueryRequestBuilder deleteQueryBuilder = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE); - deleteQueryBuilder.filter(QueryBuilders.matchQuery("title.keyword", "u-test-1")).source(indexName); - if (typeName != null) { - deleteQueryBuilder.request().getSearchRequest().types(typeName); - } - deleteQueryBuilder.get(); - // deleteQueryBuilder.filter(QueryBuilders.matchAllQuery()).get(); - System.out.println(String.format("Deleted index %s and type %s", indexName, typeName)); - } - - private RestHighLevelClient buildClient() { - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "ztzh@smart666")); - RestClientBuilder builder = RestClient.builder(new HttpHost("47.108.49.213", 9201)).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { - @Override - public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { - return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); -// return httpClientBuilder; - } - }); - - RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder); - return restHighLevelClient; - } - - /*** - * 沿用 elastic-sql实现 - * - * @throws Exception - */ - @Test - public void update() throws Exception { - // 获取client - RestHighLevelClient restHighLevelClient = buildClient(); - String updateSql = "UPDATE es_blog set title = 'u-test-2' WHERE id = '82f812fb-72e2-491e-865a-1bfbd251e5cd'"; - int index = updateSql.indexOf("WHERE"); - if (index > 0) { - String tmpSearchSql = "DELETE from es_blog " + updateSql.substring(index); - UpdateByQueryRequest request = new UpdateByQueryRequest("es_blog"); - SQLStatementParser parser = ESActionFactory.createSqlStatementParser(tmpSearchSql); - SQLDeleteStatement deleteStatement = parser.parseDeleteStatement(); - WhereParser whereParser = new WhereParser(new SqlParser(), deleteStatement); - Where where = whereParser.findWhere(); - if (where != null) { - QueryBuilder whereQuery = QueryMaker.explan(where); - request.setQuery(whereQuery); - } else { - request.setQuery(QueryBuilders.matchAllQuery()); - } - request.setScript(new Script("ctx._source['title'] = 'test-2'")); - restHighLevelClient.updateByQuery(request, RequestOptions.DEFAULT); - restHighLevelClient.close(); - } - } - - @Test - public void testClusterName() throws Exception { - Settings settings = Settings.builder().put("client.transport.ignore_cluster_name", true).build(); - TransportClient client = new PreBuiltXPackTransportClient(settings).addTransportAddress(getTransportAddress()); - NodesInfoResponse nodeInfos = client.admin().cluster().prepareNodesInfo().get(); - String clusterName = nodeInfos.getClusterName().value(); - log.info(clusterName); - } -}