|
@@ -17,11 +17,9 @@ import cn.cslg.pas.common.utils.FormatUtil;
|
|
|
import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
|
|
|
import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
|
|
|
import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
|
|
|
-import cn.cslg.pas.common.vo.ChinaLeagalStatus;
|
|
|
-import cn.cslg.pas.common.vo.ContentVO;
|
|
|
-import cn.cslg.pas.common.vo.PatentWithIdVO;
|
|
|
-import cn.cslg.pas.common.vo.StarPatentVO;
|
|
|
+import cn.cslg.pas.common.vo.*;
|
|
|
import cn.cslg.pas.domain.es.*;
|
|
|
+import cn.cslg.pas.service.business.CommonService;
|
|
|
import cn.cslg.pas.service.common.PatentStarApiService;
|
|
|
import cn.cslg.pas.service.query.FormatQueryService;
|
|
|
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
|
@@ -132,7 +130,7 @@ public class EsService {
|
|
|
String searchCondition = "";
|
|
|
List<EsCustomFieldValueDTO> customFields = queryRequest.getCustomFields();
|
|
|
if (!CollectionUtils.isEmpty(customFields)) {
|
|
|
- searchCondition = this.parseCustomField(customFields);
|
|
|
+ searchCondition = this.parseCustomField(customFields,queryRequest.getIfHaveChild());
|
|
|
}
|
|
|
Integer projectId = queryRequest.getProjectId();
|
|
|
Long current = queryRequest.getCurrent();
|
|
@@ -171,116 +169,22 @@ public class EsService {
|
|
|
//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 {
|
|
|
-// builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
-// .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
-// .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
|
|
|
-// }
|
|
|
-// }
|
|
|
- } else {
|
|
|
- builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
- .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
- .field("patent_no.keyword").order(SortOrder.Desc)));
|
|
|
- }
|
|
|
-
|
|
|
- //分页
|
|
|
- if (current > 0 && size > 0) {
|
|
|
- builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
|
|
|
- }
|
|
|
-
|
|
|
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
|
|
|
- List<PatentColumnDTO> list = new ArrayList<>();
|
|
|
- List<Hit<Patent>> hits = response.hits().hits();
|
|
|
- long total = response.hits().total().value();
|
|
|
- for (Hit<Patent> hit : hits) {
|
|
|
- Patent esMess = hit.source();
|
|
|
- PatentColumnDTO columnDTO = new PatentColumnDTO();
|
|
|
-// columnDTO.setPatentNo(esMess.getPatentNo());
|
|
|
- BeanUtils.copyProperties(esMess, columnDTO);
|
|
|
- ContentVO titleVO = new ContentVO();
|
|
|
- String title = StringUtils.strip(JSON.toJSONString(esMess.getTitle()), "[]");
|
|
|
- ContentDetailDTO titleContent = JSONObject.parseObject(title, ContentDetailDTO.class);
|
|
|
- titleVO.setContent(titleContent.getTextContent());
|
|
|
- columnDTO.setTitle(titleVO);
|
|
|
- ContentVO abstractVO = new ContentVO();
|
|
|
- String abstractStr = StringUtils.strip(JSON.toJSONString(esMess.getAbstractStr()), "[]");
|
|
|
- ContentDetailDTO abstractContent = JSONObject.parseObject(abstractStr, ContentDetailDTO.class);
|
|
|
- abstractVO.setContent(abstractContent.getTextContent());
|
|
|
- columnDTO.setAbstractStr(abstractVO);
|
|
|
- list.add(columnDTO);
|
|
|
-
|
|
|
- }
|
|
|
- this.loadCoulumnDTO(list);
|
|
|
- dto.setTotal(total);
|
|
|
- dto.setPatents(list);
|
|
|
- dto.setPageNum(current);
|
|
|
- dto.setPageSize(size);
|
|
|
- return dto;
|
|
|
- }
|
|
|
-
|
|
|
- public PatentDTO esSearch(QueryRequest queryRequest, List<EsCustomFieldValueDTO> customFields) throws Exception {
|
|
|
- PatentDTO dto = new PatentDTO();
|
|
|
-
|
|
|
- String searchCondition = "";
|
|
|
-// List<EsCustomFieldValueDTO> customFields = queryRequest.getCustomFields();
|
|
|
- if (!CollectionUtils.isEmpty(customFields)) {
|
|
|
- searchCondition = this.parseCustomField(customFields);
|
|
|
- }
|
|
|
- Integer projectId = queryRequest.getProjectId();
|
|
|
- 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);
|
|
|
- } 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;
|
|
|
- }
|
|
|
- }
|
|
|
- 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");
|
|
|
- //4. 返回数据
|
|
|
- builder.query(q);
|
|
|
- //排序
|
|
|
- List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
|
|
|
+// List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
|
|
|
// if (!CollectionUtils.isEmpty(dtoList)) {
|
|
|
+// String json = CommonService.readJsonFile("patent.json");
|
|
|
+// List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
|
|
|
// for (OrderDTO orderDTO : dtoList) {
|
|
|
-// if (orderDTO.getOrderType().equals(IfConstant.NO)) {
|
|
|
-// builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
-// .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
-// .field(orderDTO.getOrderBy()).order(SortOrder.Asc)));
|
|
|
-// } else {
|
|
|
-// builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
-// .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
-// .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
|
|
|
+// EsConfigVO configVO = esConfigVOS.stream().filter(item -> item.getField().equals(orderDTO.getOrderBy())).findFirst().orElse(null);
|
|
|
+// if (configVO != null) {
|
|
|
+// if (orderDTO.getOrderType().equals(IfConstant.NO)) {
|
|
|
+// builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
+// .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
+// .field(configVO.getEsField()).order(SortOrder.Asc)));
|
|
|
+// } else {
|
|
|
+// builder.sort(sortOptionsBuilder -> sortOptionsBuilder
|
|
|
+// .field(fieldSortBuilder -> fieldSortBuilder
|
|
|
+// .field(configVO.getEsField()).order(SortOrder.Desc)));
|
|
|
+// }
|
|
|
// }
|
|
|
// }
|
|
|
// } else {
|
|
@@ -330,31 +234,31 @@ public class EsService {
|
|
|
* @param customFields
|
|
|
* @return
|
|
|
*/
|
|
|
- public String parseCustomField(List<EsCustomFieldValueDTO> customFields) {
|
|
|
+ public String parseCustomField(List<EsCustomFieldValueDTO> customFields,Boolean ifHaveChild) {
|
|
|
int m = 1;
|
|
|
int n = 0;
|
|
|
StringBuilder builder = new StringBuilder();
|
|
|
long start = System.currentTimeMillis();
|
|
|
if (customFields.size() > m) {
|
|
|
- builder.append("(");
|
|
|
for (int i = 0; i < customFields.size(); i++) {
|
|
|
EsCustomFieldValueDTO customField = customFields.get(i);
|
|
|
if (i != n) {
|
|
|
builder.append(" ").append("and").append(" ").append("(");
|
|
|
- this.appendStr(customField, builder, m);
|
|
|
+ this.appendStr(customField, builder, m,ifHaveChild);
|
|
|
} else {
|
|
|
- this.appendStr(customField, builder, m);
|
|
|
+ builder.append("(");
|
|
|
+ this.appendStr(customField, builder, m,ifHaveChild);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
for (int i = 0; i < customFields.size(); i++) {
|
|
|
EsCustomFieldValueDTO customField = customFields.get(i);
|
|
|
- int num = customFields.size() - m;
|
|
|
if (i != n) {
|
|
|
builder.append(" ").append("and").append(" ");
|
|
|
- this.appendStr(customField, builder, m);
|
|
|
+ this.appendStr(customField, builder, m,ifHaveChild);
|
|
|
} else {
|
|
|
- this.appendStr(customField, builder, m);
|
|
|
+ builder.append("(");
|
|
|
+ this.appendStr(customField, builder, m,ifHaveChild);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -364,31 +268,37 @@ public class EsService {
|
|
|
return builder.toString();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- public void appendStr(EsCustomFieldValueDTO customField, StringBuilder builder, int m) {
|
|
|
- List<String> values = customField.getFieldValue();
|
|
|
+ public void appendStr(EsCustomFieldValueDTO customField, StringBuilder builder, int m,boolean ifHaveChild) {
|
|
|
builder.append("field").append("=").append(customField.getFieldId());
|
|
|
- builder.append(" ").append("and").append(" ");
|
|
|
- builder.append("fieldValue").append("=");
|
|
|
- if (values.size() > m) {
|
|
|
- builder.append("(");
|
|
|
- for (int j = 0; j < values.size(); j++) {
|
|
|
- String s = values.get(j);
|
|
|
- if (j != values.size() - m) {
|
|
|
- builder.append(s).append(" ").append("or").append(" ");
|
|
|
- } else {
|
|
|
- builder.append(s).append(")").append(")");
|
|
|
- }
|
|
|
+ List<String> values = customField.getFieldValue();
|
|
|
+ if (!CollectionUtils.isEmpty(values)) {
|
|
|
+ builder.append(" ").append("and").append(" ");
|
|
|
+ if (ifHaveChild) {
|
|
|
+ builder.append("statsValue").append("=");
|
|
|
+ } else {
|
|
|
+ builder.append("fieldValue").append("=");
|
|
|
}
|
|
|
- }
|
|
|
- else {
|
|
|
- for (String value : values) {
|
|
|
- builder.append(value);
|
|
|
+
|
|
|
+ if (values.size() > m) {
|
|
|
+ builder.append("(");
|
|
|
+ for (int j = 0; j < values.size(); j++) {
|
|
|
+ String s = values.get(j);
|
|
|
+ if (j != values.size() - m) {
|
|
|
+ builder.append(s).append(" ").append("or").append(" ");
|
|
|
+ } else {
|
|
|
+ builder.append(s).append(")").append(")");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (String value : values) {
|
|
|
+ builder.append(value).append(")");
|
|
|
+ }
|
|
|
}
|
|
|
+ } else {
|
|
|
+ builder.append(")");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* @param key
|
|
|
* @param page
|