Browse Source

隐藏elasticSearch

ai_dev
zhouhaibin 5 months ago
parent
commit
70c2d0c799
  1. 16
      ruoyi-common/guoyan-common-elasticsearch/pom.xml
  2. 208
      ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java
  3. 6
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgPersonProductsServiceImpl.java
  4. 125
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java

16
ruoyi-common/guoyan-common-elasticsearch/pom.xml

@ -15,14 +15,14 @@
guoyan-common-elasticsearch elasticsearch模块
</description>
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.elasticsearch</groupId>-->
<!-- <artifactId>elasticsearch</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.elasticsearch.client</groupId>-->
<!-- <artifactId>elasticsearch-rest-high-level-client</artifactId>-->
<!-- </dependency>-->
<!-- 序列化模块 -->
<dependency>
<groupId>org.dromara</groupId>

208
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<HttpHost> 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<HttpHost> 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;
// }
/**
* 同步方式

6
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 导入个人产品数据
}
}

125
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<PmgSupplierProductsVo> querypagebyes(PmgSupplierProductsBo bo, PageQuery pageQuery) {
// 执行查询
Page<PmgSupplierProductsVo> supplierProductsVOPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
List<PmgSupplierProductsVo> 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("<span style=\"color: red;\">")//手动前缀标签
.postTags("</span>");
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<PmgSupplierProductsVo> supplierProductsVOPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
// List<PmgSupplierProductsVo> 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("<span style=\"color: red;\">")//手动前缀标签
// .postTags("</span>");
// 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;
}
}

Loading…
Cancel
Save