lwhhszx преди 10 месеца
родител
ревизия
1db5d82c99

+ 1 - 0
src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java

@@ -411,4 +411,5 @@ public class PatentColumnDTO {
     private String searchNo;
     //外部专利的是否检索到
     private Boolean ifSearch = true;
+    private Double score;
 }

+ 1 - 0
src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java

@@ -27,4 +27,5 @@ public class QueryRequest {
     private String from;
     //专利详情中商品化专用ids
     private List<Integer> productIds;
+    private String semanteme;
 }

+ 1 - 0
src/main/java/cn/cslg/pas/common/vo/es/EsPatentCommonVO.java

@@ -33,4 +33,5 @@ public class EsPatentCommonVO {
     private List<String> isAdd;
     private Long startNum;
     private Long endNum;
+    private String semanteme;
 }

Файловите разлики са ограничени, защото са твърде много
+ 6 - 5
src/main/java/cn/cslg/pas/service/business/PatentService.java


+ 3 - 1
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -7,6 +7,7 @@ import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import cn.cslg.pas.common.model.addPatentToReport.PatentNoWithIdVO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.model.es.GetVectorVO;
 import cn.cslg.pas.common.model.request.MapRequest;
 import cn.cslg.pas.common.model.request.OrderDTO;
 import cn.cslg.pas.common.model.request.QueryRequest;
@@ -69,7 +70,6 @@ public class EsPatentService {
 
     private final ElasticsearchClient client;
     private final FormatQueryService formatQueryService;
-
     @Autowired
     private PermissionService permissionService;
 
@@ -960,4 +960,6 @@ public class EsPatentService {
         dto.setPageSize(size);
         return dto;
     }
+
+
 }

+ 3 - 10
src/main/java/cn/cslg/pas/service/business/es/EsPatentVectorService.java

@@ -31,9 +31,8 @@ public class EsPatentVectorService {
     private final EsService esService;
     private final EsPatentService esPatentService;
     public void addPatentVector(Patent patent, String id) throws Exception {
-        Boolean ifHaveVector = this.searchIfHaveVector(id);
         System.out.println(id);
-        if (!ifHaveVector) {
+        if (patent.getApplicantAddr()==null) {
             this.addPatentVectorToEs(patent, id);
         }
     }
@@ -66,13 +65,8 @@ public class EsPatentVectorService {
                 getVectorVO.setText(abStr);
                 List<Float> floatList = pythonApiService.getStrVector(getVectorVO);
                 System.out.println("向量"+floatList.size());
-                Patent patent1 = new Patent();
-                PatentJoin patentJoin = new PatentJoin();
-                patentJoin.setParent(patentId);
-                patentJoin.setName("patent_vector");
-                patent1.setPatentJoin(patentJoin);
-                patent1.setAbstractVector(floatList);
-                esService.addChildPatent(patent1, patentId);
+                patent.setAbstractVector(floatList);
+                esService.updatePatent(patent, patentId);
             }
         }
 
@@ -107,7 +101,6 @@ public class EsPatentVectorService {
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
-                    e.printStackTrace();
                 }
 
             }

+ 46 - 12
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -7,6 +7,7 @@ import cn.cslg.pas.common.dto.PatentDTO;
 import cn.cslg.pas.common.dto.business.EsPatentFamilyDTO;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
+import cn.cslg.pas.common.model.es.GetVectorVO;
 import cn.cslg.pas.common.model.request.MapRequest;
 import cn.cslg.pas.common.model.request.OrderDTO;
 import cn.cslg.pas.common.model.request.QueryRequest;
@@ -22,6 +23,7 @@ import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.AssoProjectPersonService;
 import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.common.PatentStarApiService;
+import cn.cslg.pas.service.common.PythonApiService;
 import cn.cslg.pas.service.importPatent.WebVOTransformService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
@@ -57,7 +59,7 @@ import static org.springframework.data.elasticsearch.annotations.TermVector.no;
 public class EsService {
     public final List<String> dateList = Arrays.asList("AD", "PD", "GD", "EXD", "PAD", "PED", "PPD", "EPD");
     private final ElasticsearchClient client;
-
+    private final PythonApiService pythonApiService;
     @Autowired
     private EsFamilyService esFamilyService;
     @Autowired
@@ -69,8 +71,9 @@ public class EsService {
     private EsCountService esCountService;
     @Autowired
     private EsCustomFieldService esCustomFieldService;
-   @Autowired
-   private AssoProjectPersonService assoProjectPersonService;
+    @Autowired
+    private AssoProjectPersonService assoProjectPersonService;
+
     /**
      * @param patent
      * @throws Exception
@@ -189,6 +192,7 @@ public class EsService {
         commonVO.setEsField(esField);
         commonVO.setCustomFields(queryRequest.getCustomFields());
         commonVO.setOrderDTOList(queryRequest.getOrderDTOList());
+        commonVO.setSemanteme(queryRequest.getSemanteme());
         SearchRequest.Builder builder = this.getCommonPatent(commonVO);
         //解除最大条数限制
         builder.trackTotalHits(i -> i.enabled(true));
@@ -196,6 +200,7 @@ public class EsService {
         try {
             response = client.search(builder.build(), Patent.class);
         } catch (Exception e) {
+            e.printStackTrace();
             throw new XiaoShiException("检索错误,请检查检索式");
         }
         List<PatentColumnDTO> list = new ArrayList<>();
@@ -208,9 +213,14 @@ public class EsService {
             total = response.hits().total().value();
         }
         for (Hit<Patent> hit : hits) {
+         Double score=   hit.score();
+
+            String  str = String.format("%.4f",score);
+            double four = Double.parseDouble(str);
             String id = hit.id();
             Patent esMess = hit.source();
             PatentColumnDTO columnDTO = this.getPatentColumnDTO(esMess, projectId, id);
+            columnDTO.setScore(four);
             list.add(columnDTO);
         }
         this.loadCoulumnDTO(list);
@@ -250,6 +260,7 @@ public class EsService {
         Long size = commonVO.getSize();
         Long startNum = commonVO.getStartNum();
         Long endNum = commonVO.getEndNum();
+        String semanteme = commonVO.getSemanteme();
         Integer temPageFrom = 0;
         Integer temPageSize = 100000;
         if (current != null && size != null) {
@@ -266,8 +277,8 @@ public class EsService {
         //设置查询索引
         builder.index("patent");
 
-        Query reQuery = esPatentService.getEntireNotInQuery(commonVO);
-
+        Query reTmQuery = esPatentService.getEntireNotInQuery(commonVO);
+        Query reQuery = this.getMeanSearch(reTmQuery, semanteme);
         //判断同族分组
         if (StringUtils.isNotEmpty(esField)) {
             Query existQ = QueryBuilders.exists(i -> i.field(esField));
@@ -284,9 +295,11 @@ public class EsService {
         builder.from(pageFrom).size(pageSize);
 
         //排序
-        List<OrderDTO> dtoList = commonVO.getOrderDTOList();
-        List<SortOptions> optionsList = this.getCommonSortMethod(dtoList);
-        builder.sort(optionsList);
+        if (semanteme == null || semanteme.trim().equals("")) {
+            List<OrderDTO> dtoList = commonVO.getOrderDTOList();
+            List<SortOptions> optionsList = this.getCommonSortMethod(dtoList);
+            builder.sort(optionsList);
+        }
         return builder;
     }
 
@@ -1483,19 +1496,40 @@ public class EsService {
     }
 
 
-    public void judgeQueryPatentRoot(QueryRequest queryRequest){
+    public void judgeQueryPatentRoot(QueryRequest queryRequest) {
 
         Integer projectId = queryRequest.getProjectId();
         Integer productId = queryRequest.getProductId();
         String productFrom = queryRequest.getFrom();
-        if(projectId!=null) {
+        if (projectId != null) {
             List<Integer> ids = assoProjectPersonService.getRootProjectIds();
-            if (ids!=null&&(ids.size() == 0||!ids.contains(projectId))) {
-                throw new XiaoShiException(ExceptionEnum.PERMISSION_ERROR,"无法查询此专题库专利");
+            if (ids != null && (ids.size() == 0 || !ids.contains(projectId))) {
+                throw new XiaoShiException(ExceptionEnum.PERMISSION_ERROR, "无法查询此专题库专利");
             }
         }
     }
 
+
+    public Query getMeanSearch(Query query, String mean) {
+
+        if (mean != null && !mean.trim().equals("")) {
+            GetVectorVO getVectorVO = new GetVectorVO();
+            getVectorVO.setText(mean);
+            List<Float> floatList = pythonApiService.getStrVector(getVectorVO);
+            JsonData b = JsonData.of(floatList);
+            System.out.println(b);
+            String source = "if (!doc['abstract_vector'].isEmpty()) {return cosineSimilarity(params.queryVector,'abstract_vector');} else {return 0.1; }";
+            InlineScript inlineScript = InlineScript.of(i -> i.source(source).lang("painless").params("queryVector", JsonData.of(floatList)));
+            Script script = Script.of(i -> i.inline(inlineScript));
+            Query newQuery = QueryBuilders.scriptScore(i -> i.script(script)
+                    .query(query));
+            String a = newQuery.toString();
+            System.out.println(a);
+            return newQuery;
+        }
+        return query;
+
+    }
 }
 
 

+ 2 - 2
src/main/resources/application-dev.yml

@@ -61,10 +61,10 @@ spring:
     #初始化表结构
 
 authorUrl: http://192.168.2.24:8871
-PCSUrl: http://192.168.2.24:8871
+PCSUrl: http://localhost:8871
 #OPSUrl: http://192.168.2.24:5001
 OPSUrl: http://139.224.24.90:5001
-PASUrl: http://localhost:8879
+PASUrl: http://192.168.2.24:8879
 FMSUrl: http://192.168.2.24:8803
 WDUrl: http://1.116.113.26:81
 PythonUrl: http://localhost:8001