From 70c2d0c799a55e210b12eab98bf050e73db09edc Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Sun, 29 Sep 2024 10:27:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9A=90=E8=97=8FelasticSearch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../guoyan-common-elasticsearch/pom.xml | 16 +- .../config/ElasticSearchConfig.java | 208 +++++++++--------- .../impl/PmgPersonProductsServiceImpl.java | 6 + .../impl/PmgSupplierProductsServiceImpl.java | 125 +++++------ 4 files changed, 181 insertions(+), 174 deletions(-) diff --git a/ruoyi-common/guoyan-common-elasticsearch/pom.xml b/ruoyi-common/guoyan-common-elasticsearch/pom.xml index c530c80..735cfd3 100644 --- a/ruoyi-common/guoyan-common-elasticsearch/pom.xml +++ b/ruoyi-common/guoyan-common-elasticsearch/pom.xml @@ -15,14 +15,14 @@ guoyan-common-elasticsearch elasticsearch模块 - - org.elasticsearch - elasticsearch - - - org.elasticsearch.client - elasticsearch-rest-high-level-client - + + + + + + + + org.dromara diff --git a/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java b/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java index 9d46dc4..fb12261 100644 --- a/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java +++ b/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java @@ -1,19 +1,19 @@ package org.dromara.common.elasticsearch.config; -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.elasticsearch.client.RestClient; -import org.elasticsearch.client.RestClientBuilder; -import org.elasticsearch.client.RestHighLevelClient; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.ArrayList; -import java.util.List; +//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.elasticsearch.client.RestClient; +//import org.elasticsearch.client.RestClientBuilder; +//import org.elasticsearch.client.RestHighLevelClient; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +//import java.util.ArrayList; +//import java.util.List; /** * ElasticSearch 配置 @@ -21,98 +21,98 @@ import java.util.List; * @author wqliu * @date 2024-02-21 */ -@Configuration +//@Configuration public class ElasticSearchConfig { - @Value("${elasticsearch.uris}") - private String hosts; - - @Value("${elasticsearch.username}") - private String userName; - - @Value("${elasticsearch.password}") - private String password; - - /** - * es 请求方式 - */ - @Value("${elasticsearch.scheme}") - private String scheme; - /** - * es 连接超时时间 - */ - @Value("${elasticsearch.connectTimeOut}") - - private int connectTimeOut; - /** - * es socket 连接超时时间 - */ - @Value("${elasticsearch.socketTimeOut}") - - private int socketTimeOut; - /** - * es 请求超时时间 - */ - @Value("${elasticsearch.connectionRequestTimeOut}") - private int connectionRequestTimeOut; - /** - * es 最大连接数 - */ - @Value("${elasticsearch.maxConnectNum}") - private int maxConnectNum; - /** - * es 每个路由的最大连接数 - */ - @Value("${elasticsearch.maxConnectNumPerRoute}") - private int maxConnectNumPerRoute; - - - /** - * 如果@Bean没有指定bean的名称,那么方法名就是bean的名称 - */ - @Bean - public RestHighLevelClient restHighLevelClient() { - // 构建连接对象 - RestClientBuilder builder = RestClient.builder(getEsHost()); - - // 连接延时配置 - builder.setRequestConfigCallback(requestConfigBuilder -> { - requestConfigBuilder.setConnectTimeout(connectTimeOut); - requestConfigBuilder.setSocketTimeout(socketTimeOut); - requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut); - return requestConfigBuilder; - }); - - // 连接数配置 - builder.setHttpClientConfigCallback(httpClientBuilder -> { - httpClientBuilder.setMaxConnTotal(maxConnectNum); - httpClientBuilder.setMaxConnPerRoute(maxConnectNumPerRoute); - httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider()); - - return httpClientBuilder; - }); - return new RestHighLevelClient(builder); - } - - private HttpHost[] getEsHost() { - // 拆分地址(es为多节点时,不同host以逗号间隔) - List hostLists = new ArrayList<>(); - String[] hostList = hosts.split(","); - for (String addr : hostList) { - String host = addr.split(":")[0]; - String port = addr.split(":")[1]; - hostLists.add(new HttpHost(host, Integer.parseInt(port), scheme)); - } - // 转换成 HttpHost 数组 - return hostLists.toArray(new HttpHost[]{}); - } - - private CredentialsProvider getCredentialsProvider() { - // 设置用户名、密码 - CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password)); - return credentialsProvider; - } +// @Value("${elasticsearch.uris}") +// private String hosts; +// +// @Value("${elasticsearch.username}") +// private String userName; +// +// @Value("${elasticsearch.password}") +// private String password; +// +// /** +// * es 请求方式 +// */ +// @Value("${elasticsearch.scheme}") +// private String scheme; +// /** +// * es 连接超时时间 +// */ +// @Value("${elasticsearch.connectTimeOut}") +// +// private int connectTimeOut; +// /** +// * es socket 连接超时时间 +// */ +// @Value("${elasticsearch.socketTimeOut}") +// +// private int socketTimeOut; +// /** +// * es 请求超时时间 +// */ +// @Value("${elasticsearch.connectionRequestTimeOut}") +// private int connectionRequestTimeOut; +// /** +// * es 最大连接数 +// */ +// @Value("${elasticsearch.maxConnectNum}") +// private int maxConnectNum; +// /** +// * es 每个路由的最大连接数 +// */ +// @Value("${elasticsearch.maxConnectNumPerRoute}") +// private int maxConnectNumPerRoute; +// +// +// /** +// * 如果@Bean没有指定bean的名称,那么方法名就是bean的名称 +// */ +// @Bean +// public RestHighLevelClient restHighLevelClient() { +// // 构建连接对象 +// RestClientBuilder builder = RestClient.builder(getEsHost()); +// +// // 连接延时配置 +// builder.setRequestConfigCallback(requestConfigBuilder -> { +// requestConfigBuilder.setConnectTimeout(connectTimeOut); +// requestConfigBuilder.setSocketTimeout(socketTimeOut); +// requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut); +// return requestConfigBuilder; +// }); +// +// // 连接数配置 +// builder.setHttpClientConfigCallback(httpClientBuilder -> { +// httpClientBuilder.setMaxConnTotal(maxConnectNum); +// httpClientBuilder.setMaxConnPerRoute(maxConnectNumPerRoute); +// httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider()); +// +// return httpClientBuilder; +// }); +// return new RestHighLevelClient(builder); +// } +// +// private HttpHost[] getEsHost() { +// // 拆分地址(es为多节点时,不同host以逗号间隔) +// List hostLists = new ArrayList<>(); +// String[] hostList = hosts.split(","); +// for (String addr : hostList) { +// String host = addr.split(":")[0]; +// String port = addr.split(":")[1]; +// hostLists.add(new HttpHost(host, Integer.parseInt(port), scheme)); +// } +// // 转换成 HttpHost 数组 +// return hostLists.toArray(new HttpHost[]{}); +// } +// +// private CredentialsProvider getCredentialsProvider() { +// // 设置用户名、密码 +// CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); +// credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password)); +// return credentialsProvider; +// } /** * 同步方式 diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgPersonProductsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgPersonProductsServiceImpl.java index fb3ea04..afafb3a 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgPersonProductsServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgPersonProductsServiceImpl.java @@ -19,6 +19,7 @@ import org.dromara.productManagement.domain.vo.PmgPersonProductsVo; import org.dromara.productManagement.domain.PmgPersonProducts; import org.dromara.productManagement.mapper.PmgPersonProductsMapper; import org.dromara.productManagement.service.IPmgPersonProductsService; +import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; @@ -168,4 +169,9 @@ public class PmgPersonProductsServiceImpl implements IPmgPersonProductsService { }); return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + public void personProductsImportData(MultipartFile file, boolean updateSupport) { + // TODO 导入个人产品数据 + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java index 18805d6..3329a31 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java @@ -14,17 +14,17 @@ import lombok.RequiredArgsConstructor; import org.dromara.productManagement.domain.*; import org.dromara.productManagement.mapper.PmgSupplierProductModelDetailsMapper; import org.dromara.productManagement.mapper.PmgSupplierProductModelMapper; -import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.client.RequestOptions; -import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.SearchHits; -import org.elasticsearch.search.builder.SearchSourceBuilder; -import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; +//import org.elasticsearch.action.search.SearchRequest; +//import org.elasticsearch.action.search.SearchResponse; +//import org.elasticsearch.client.RequestOptions; +//import org.elasticsearch.client.RestHighLevelClient; +//import org.elasticsearch.index.query.QueryBuilders; +//import org.elasticsearch.search.SearchHit; +//import org.elasticsearch.search.SearchHits; +//import org.elasticsearch.search.builder.SearchSourceBuilder; +//import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; +//import org.springframework.beans.BeanUtils; +//import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.productManagement.domain.bo.PmgSupplierProductsBo; import org.dromara.productManagement.domain.vo.PmgSupplierProductsVo; @@ -49,8 +49,8 @@ public class PmgSupplierProductsServiceImpl implements IPmgSupplierProductsServi private final PmgSupplierProductsMapper baseMapper; private final PmgSupplierProductModelDetailsMapper supplierProductModelDetailsMapper; private final PmgSupplierProductModelMapper supplierProductModelMapper; - @Autowired - private RestHighLevelClient client; +// @Autowired +// private RestHighLevelClient client; /** * 查询供应商产品管理 * @@ -188,54 +188,55 @@ public class PmgSupplierProductsServiceImpl implements IPmgSupplierProductsServi return baseMapper.deleteBatchIds(ids) > 0; } public Page querypagebyes(PmgSupplierProductsBo bo, PageQuery pageQuery) { - // 执行查询 - Page supplierProductsVOPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); - List supplierProductsVOList =new ArrayList<>(); - String productName = bo.getProductName(); - SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - SearchRequest searchRequest = new SearchRequest("pmg_supplier_products"); - // //高亮器 - HighlightBuilder highlightBuilder = new HighlightBuilder(); - highlightBuilder.requireFieldMatch(false)//多字段时,需要设置为false//因为高亮查询默认是对查询字段即description就行高亮,可以关闭字段匹配,这样就可以对查询到的多个字段(前提是有关键词并且改字段可以分词)进行高亮显示 - .field("product_name")//若有关键字切可以分词,则可以高亮,写*可以匹配所有字段 - .field("product_specifications")//若有关键字切可以分词,则可以高亮,写*可以匹配所有字段 - .preTags("")//手动前缀标签 - .postTags(""); - searchSourceBuilder - .query(QueryBuilders.multiMatchQuery(productName, "product_name", "product_specifications")) - .highlighter(highlightBuilder) - .from(pageQuery.getPageNum()-1) //起始位置:start=(page-1)*size - .size(pageQuery.getPageSize()); //每页显示条数; - - searchRequest.source(searchSourceBuilder); - try { - SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); - // 解析结果 - SearchHits hits = response.getHits(); - - - supplierProductsVOPage.setTotal(response.getHits().getTotalHits().value); - SearchHit[] searchHits = hits.getHits(); - ObjectMapper mapper = new ObjectMapper(); - for (SearchHit hit : searchHits) { - String json =mapper.writeValueAsString(hit.getSourceAsMap()); - SupplierProductsDTO supplierProductsDTO = mapper.readValue(json, SupplierProductsDTO.class); - PmgSupplierProductsVo supplierProductsVO = new PmgSupplierProductsVo(); - BeanUtils.copyProperties(supplierProductsDTO,supplierProductsVO); - if(hit.getHighlightFields().get("product_name")!=null){ - supplierProductsVO.setProductName(hit.getHighlightFields().get("product_name").getFragments()[0].toString()); - - } - if(hit.getHighlightFields().get("product_specifications")!=null){ - supplierProductsVO.setProductSpecifications(hit.getHighlightFields().get("product_specifications").getFragments()[0].toString()); - - } - supplierProductsVOList.add(supplierProductsVO); - } - supplierProductsVOPage.setRecords(supplierProductsVOList); - return supplierProductsVOPage; - } catch (Exception e) { - throw new RuntimeException(e); - } +// // 执行查询 +// Page supplierProductsVOPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); +// List supplierProductsVOList =new ArrayList<>(); +// String productName = bo.getProductName(); +// SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); +// SearchRequest searchRequest = new SearchRequest("pmg_supplier_products"); +// // //高亮器 +// HighlightBuilder highlightBuilder = new HighlightBuilder(); +// highlightBuilder.requireFieldMatch(false)//多字段时,需要设置为false//因为高亮查询默认是对查询字段即description就行高亮,可以关闭字段匹配,这样就可以对查询到的多个字段(前提是有关键词并且改字段可以分词)进行高亮显示 +// .field("product_name")//若有关键字切可以分词,则可以高亮,写*可以匹配所有字段 +// .field("product_specifications")//若有关键字切可以分词,则可以高亮,写*可以匹配所有字段 +// .preTags("")//手动前缀标签 +// .postTags(""); +// searchSourceBuilder +// .query(QueryBuilders.multiMatchQuery(productName, "product_name", "product_specifications")) +// .highlighter(highlightBuilder) +// .from(pageQuery.getPageNum()-1) //起始位置:start=(page-1)*size +// .size(pageQuery.getPageSize()); //每页显示条数; +// +// searchRequest.source(searchSourceBuilder); +// try { +// SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); +// // 解析结果 +// SearchHits hits = response.getHits(); +// +// +// supplierProductsVOPage.setTotal(response.getHits().getTotalHits().value); +// SearchHit[] searchHits = hits.getHits(); +// ObjectMapper mapper = new ObjectMapper(); +// for (SearchHit hit : searchHits) { +// String json =mapper.writeValueAsString(hit.getSourceAsMap()); +// SupplierProductsDTO supplierProductsDTO = mapper.readValue(json, SupplierProductsDTO.class); +// PmgSupplierProductsVo supplierProductsVO = new PmgSupplierProductsVo(); +// BeanUtils.copyProperties(supplierProductsDTO,supplierProductsVO); +// if(hit.getHighlightFields().get("product_name")!=null){ +// supplierProductsVO.setProductName(hit.getHighlightFields().get("product_name").getFragments()[0].toString()); +// +// } +// if(hit.getHighlightFields().get("product_specifications")!=null){ +// supplierProductsVO.setProductSpecifications(hit.getHighlightFields().get("product_specifications").getFragments()[0].toString()); +// +// } +// supplierProductsVOList.add(supplierProductsVO); +// } +// supplierProductsVOPage.setRecords(supplierProductsVOList); +// return supplierProductsVOPage; +// } catch (Exception e) { +// throw new RuntimeException(e); +// } + return null; } }