Selaa lähdekoodia

20241119 外部检索专利时返回专利相似度信息

lwhhszx 10 kuukautta sitten
vanhempi
commit
03630a89d8

+ 1 - 3
src/main/java/cn/cslg/pas/controller/outApi/OutSidersController.java

@@ -57,8 +57,6 @@ public class OutSidersController {
 
     @RequestMapping(value = "/refreashPatentVector", method = RequestMethod.GET)
     public void refreashPatentVector(Integer id){
-
-
-
+        esPatentVectorService.refreshPatentVector(id);
     }
 }

+ 61 - 0
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -899,4 +899,65 @@ public class EsPatentService {
         }
 
     }
+
+    /**
+     * lrj
+     * 为导入专利向量建立的方法,不具有普遍性,其他功能勿用
+     * @param queryRequest
+     * @return
+     * @throws Exception
+     */
+    public PatentDTO getPatentforVector(QueryRequest queryRequest) throws Exception {
+        PatentDTO dto = new PatentDTO();
+        Integer projectId = queryRequest.getProjectId();
+        Long current = queryRequest.getCurrent();
+        Long size = queryRequest.getSize();
+
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        List<String> reSources = new ArrayList<>();
+        reSources.add("abstract_str");
+        builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
+                .filter(fieldSourceBuilder -> fieldSourceBuilder
+                        .includes(reSources)));
+        //解除最大条数限制
+        builder.trackTotalHits(i -> i.enabled(true));
+        Query query =null;
+        if(projectId!=null) {
+            query= QueryBuilders.hasChild(child -> child.type("project")
+                    .query(org.springframework.data.elasticsearch.client.elc.QueryBuilders.matchQueryAsQuery("project_id", projectId.toString(), null, null)));
+        }
+        else {
+            query=QueryBuilders.exists(i->i.field("patent_no"));
+        }
+            SearchResponse<Patent> response = null;
+        builder.query(query);
+
+        if (current > 0 && size > 0) {
+            builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
+        }
+        try {
+            response = client.search(builder.build(), Patent.class);
+        } catch (Exception e) {
+            throw new XiaoShiException("检索错误,请检查检索式");
+        }
+        List<PatentColumnDTO> list = new ArrayList<>();
+        List<Hit<Patent>> hits = response.hits().hits();
+        long total = 0L;
+            total = response.hits().total().value();
+        for (Hit<Patent> hit : hits) {
+            String id = hit.id();
+            Patent esMess = hit.source();
+            PatentColumnDTO columnDTO = new PatentColumnDTO();
+            BeanUtils.copyProperties(esMess,columnDTO);
+            columnDTO.setPatentId(id);
+            list.add(columnDTO);
+        }
+        dto.setTotal(total);
+        dto.setPatents(list);
+        dto.setPageNum(current);
+        dto.setPageSize(size);
+        return dto;
+    }
 }

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

@@ -1,6 +1,9 @@
 package cn.cslg.pas.service.business.es;
 
+import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.dto.PatentDTO;
 import cn.cslg.pas.common.model.es.GetVectorVO;
+import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.PatentJoin;
 import cn.cslg.pas.domain.es.Text;
@@ -26,9 +29,10 @@ public class EsPatentVectorService {
     private final ElasticsearchClient client;
     private final PythonApiService pythonApiService;
     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) {
             this.addPatentVectorToEs(patent, id);
         }
@@ -61,6 +65,7 @@ public class EsPatentVectorService {
                 GetVectorVO getVectorVO = new GetVectorVO();
                 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);
@@ -79,9 +84,32 @@ public class EsPatentVectorService {
     }
 
     public void refreshPatentVector(Integer id) {
-        if (id != null) {
-        }
+
+            long total = 1l;
+            long size = 10l;
+            long current = 0l;
 
 
+            while (size * current < total) {
+                current += 1;
+                QueryRequest queryRequest = new QueryRequest();
+                queryRequest.setProjectId(id);
+                queryRequest.setSize(size);
+                queryRequest.setCurrent(current);
+                try {
+                    PatentDTO patentDTO = esPatentService.getPatentforVector(queryRequest);
+                    total = patentDTO.getTotal();
+                    System.out.println("总数"+total);
+                    for (PatentColumnDTO patentColumnDTO : patentDTO.getPatents()) {
+                        Patent patent =new Patent();
+                        patent.setAbstractStr(patentColumnDTO.getAbstractStr());
+                        this.addPatentVector(patent,patentColumnDTO.getPatentId());
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    e.printStackTrace();
+                }
+
+            }
     }
 }

+ 1 - 0
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -369,6 +369,7 @@ public class EsService {
     //装载专利清单列表的数据
     public PatentColumnDTO getPatentColumnDTO(Patent patent, Integer projectId, String id) {
         PatentColumnDTO columnDTO = new PatentColumnDTO();
+        columnDTO.setPatentId(id);
         BeanUtils.copyProperties(patent, columnDTO);
         if (!CollectionUtils.isEmpty(patent.getIpc())) {
             boolean b = patent.getIpc().stream().allMatch(Objects::isNull);

+ 21 - 0
src/test/java/cn/cslg/pas/service/EsPatentVectorServiceTests.java

@@ -0,0 +1,21 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.service.business.es.EsPatentVectorService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class EsPatentVectorServiceTests {
+@Autowired
+private EsPatentVectorService esPatentVectorService;
+    @Test
+    public void refreshPatentVector(){
+        esPatentVectorService.refreshPatentVector(null);
+
+
+    }
+}