|
|
@@ -261,46 +261,75 @@ public class EsPatentService {
|
|
|
* @return
|
|
|
*/
|
|
|
public List<PatentPageMessageVO> getPatentPageMessage(QueryRequest queryRequest) throws Exception {
|
|
|
- List<PatentPageMessageVO> patentPageMessageVOS= new ArrayList<>();
|
|
|
- PatentDTO dto = new PatentDTO();
|
|
|
- String searchCondition = "";
|
|
|
- Integer projectId = queryRequest.getProjectId();
|
|
|
+ List<PatentPageMessageVO> patentPageMessageVOS = new ArrayList<>();
|
|
|
+
|
|
|
Long current = queryRequest.getCurrent();
|
|
|
Long size = queryRequest.getSize();
|
|
|
-
|
|
|
- //判断表达式
|
|
|
- if (queryRequest instanceof StringRequest) {
|
|
|
- searchCondition = ((StringRequest) queryRequest).getSearchQuery();
|
|
|
- } else if (queryRequest instanceof MapRequest) {
|
|
|
- Map<String, Object> map = ((MapRequest) queryRequest).getSearchQuery();
|
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
|
- for (String key : map.keySet()) {
|
|
|
- Object value = map.get(key);
|
|
|
- if (!"".contentEquals(stringBuilder)) {
|
|
|
- stringBuilder = stringBuilder.append(" AND ").append(key).append("=").append(value);
|
|
|
+ SearchRequest.Builder builder = new SearchRequest.Builder();
|
|
|
+ //设置查询索引
|
|
|
+ builder.index("patent");
|
|
|
+ Query q = this.getQuery(queryRequest);
|
|
|
+ //4. 返回数据
|
|
|
+ builder.query(q);
|
|
|
+ //排序
|
|
|
+ List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
|
|
|
+ if (!CollectionUtils.isEmpty(dtoList)) {
|
|
|
+ for (OrderDTO orderDTO : dtoList) {
|
|
|
+ if (orderDTO.getOrderType().equals(IfConstant.NO)) {
|
|
|
+ builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
+ .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
+ .field(orderDTO.getOrderBy()).order(SortOrder.Asc)));
|
|
|
} else {
|
|
|
- stringBuilder = stringBuilder.append(key).append("=").append(value);
|
|
|
+ builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
+ .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
+ .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
|
|
|
}
|
|
|
}
|
|
|
- searchCondition = stringBuilder.toString();
|
|
|
+ } else {
|
|
|
+ builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
+ .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
+ .field("patent_no.keyword").order(SortOrder.Desc)));
|
|
|
}
|
|
|
- if (projectId != null) {
|
|
|
- if (searchCondition != null && !"".equals(searchCondition.trim())) {
|
|
|
- searchCondition = "projectId = " + projectId + " AND " + searchCondition;
|
|
|
- } else {
|
|
|
- searchCondition = "projectId = " + projectId;
|
|
|
- }
|
|
|
+ //分页
|
|
|
+ if (current > 0 && size > 0) {
|
|
|
+ builder.from(current.intValue()).size(size.intValue());
|
|
|
+ }
|
|
|
+ SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
|
|
|
+ List<Hit<Patent>> hits = response.hits().hits();
|
|
|
+ for (Hit<Patent> hit : hits) {
|
|
|
+ PatentPageMessageVO patentPageMessageVO = new PatentPageMessageVO();
|
|
|
+ patentPageMessageVO.setPatentNo(hit.source().getPatentNo());
|
|
|
+ patentPageMessageVOS.add(patentPageMessageVO);
|
|
|
}
|
|
|
+ return patentPageMessageVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检索上一页下一页信息
|
|
|
+ *
|
|
|
+ * @param queryRequest 检索条件
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<Patent> getPatentsWithNotNo(QueryRequest queryRequest, List<String> patentNos) throws Exception {
|
|
|
+ List<Patent> patentList = new ArrayList<>();
|
|
|
+ Long current = queryRequest.getCurrent();
|
|
|
+ Long size = queryRequest.getSize();
|
|
|
SearchRequest.Builder builder = new SearchRequest.Builder();
|
|
|
//设置查询索引
|
|
|
builder.index("patent");
|
|
|
- //1. 解析检索条件
|
|
|
- treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
|
|
|
- //格式化检索式
|
|
|
- //3. 从es中检索数据
|
|
|
- Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
|
|
|
+ Query q = this.getQuery(queryRequest);
|
|
|
+
|
|
|
+ Query reQuery =null;
|
|
|
+ if(patentNos!=null&&patentNos.size()>0){
|
|
|
+ List<Query> notInQuery = this.getNoNotInQuery(patentNos);
|
|
|
+ reQuery = QueryBuilders.bool(i -> i.must(q).mustNot(notInQuery));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ reQuery = QueryBuilders.bool(i -> i.must(q));
|
|
|
+ }
|
|
|
//4. 返回数据
|
|
|
- builder.query(q);
|
|
|
+ builder.query(reQuery);
|
|
|
//排序
|
|
|
List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
|
|
|
if (!CollectionUtils.isEmpty(dtoList)) {
|
|
|
@@ -320,6 +349,12 @@ public class EsPatentService {
|
|
|
.field(fieldSortBuilder -> fieldSortBuilder
|
|
|
.field("patent_no.keyword").order(SortOrder.Desc)));
|
|
|
}
|
|
|
+
|
|
|
+ List<String> reSources = this.rePatentSource();
|
|
|
+ builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
|
|
|
+ .filter(fieldSourceBuilder -> fieldSourceBuilder
|
|
|
+ .includes(reSources)));
|
|
|
+
|
|
|
//分页
|
|
|
if (current > 0 && size > 0) {
|
|
|
builder.from(current.intValue()).size(size.intValue());
|
|
|
@@ -327,10 +362,74 @@ public class EsPatentService {
|
|
|
SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
|
|
|
List<Hit<Patent>> hits = response.hits().hits();
|
|
|
for (Hit<Patent> hit : hits) {
|
|
|
- PatentPageMessageVO patentPageMessageVO =new PatentPageMessageVO();
|
|
|
- patentPageMessageVO.setPatentNo(hit.source().getPatentNo());
|
|
|
- patentPageMessageVOS.add(patentPageMessageVO);
|
|
|
+ if (hits != null && hits.size() > 0) {
|
|
|
+ Patent patent = hits.get(0).source();
|
|
|
+ patentList.add(patent);
|
|
|
+ }
|
|
|
}
|
|
|
- return patentPageMessageVOS;
|
|
|
+ return patentList;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long getTotalNum(QueryRequest queryRequest) throws Exception {
|
|
|
+ SearchRequest.Builder builder = new SearchRequest.Builder();
|
|
|
+ //设置查询索引
|
|
|
+ builder.index("patent");
|
|
|
+ Query q = this.getQuery(queryRequest);
|
|
|
+ //4. 返回数据
|
|
|
+ Query reQuery = QueryBuilders.bool(i -> i.must(q));
|
|
|
+ builder.query(reQuery);
|
|
|
+
|
|
|
+ List<String> reSources = this.rePatentSource();
|
|
|
+ builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
|
|
|
+ .filter(fieldSourceBuilder -> fieldSourceBuilder
|
|
|
+ .includes(reSources)));
|
|
|
+ SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
|
|
|
+ return response.hits().total().value();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Query getQuery(QueryRequest queryRequest) throws Exception {
|
|
|
+ String searchCondition = "";
|
|
|
+ Integer projectId = queryRequest.getProjectId();
|
|
|
+ //判断表达式
|
|
|
+ if (queryRequest instanceof StringRequest) {
|
|
|
+ searchCondition = ((StringRequest) queryRequest).getSearchQuery();
|
|
|
+ } else if (queryRequest instanceof MapRequest) {
|
|
|
+ Map<String, Object> map = ((MapRequest) queryRequest).getSearchQuery();
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ for (String key : map.keySet()) {
|
|
|
+ Object value = map.get(key);
|
|
|
+ if (!"".contentEquals(stringBuilder)) {
|
|
|
+ stringBuilder = stringBuilder.append(" AND ").append(key).append("=").append(value);
|
|
|
+ } else {
|
|
|
+ stringBuilder = stringBuilder.append(key).append("=").append(value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ searchCondition = stringBuilder.toString();
|
|
|
+ }
|
|
|
+ if (projectId != null) {
|
|
|
+ if (searchCondition != null && !"".equals(searchCondition.trim())) {
|
|
|
+ searchCondition = "projectId = " + projectId + " AND " + searchCondition;
|
|
|
+ } else {
|
|
|
+ searchCondition = "projectId = " + projectId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //1. 解析检索条件
|
|
|
+ treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
|
|
|
+ //格式化检索式
|
|
|
+ //3. 从es中检索数据
|
|
|
+ Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
|
|
|
+
|
|
|
+ return q;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<Query> getNoNotInQuery(List<String> patentNos) {
|
|
|
+ List<Query> queryList = new ArrayList<>();
|
|
|
+ for (String patentNo : patentNos) {
|
|
|
+ Query q1 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(patentNo));
|
|
|
+ queryList.add(q1);
|
|
|
+ }
|
|
|
+ return queryList;
|
|
|
}
|
|
|
}
|