Browse Source

把233的治疗存入232中

kongwz 6 years ago
parent
commit
d7adfe7dab

+ 32 - 5
graph/src/main/java/org/diagbot/graph/encryptionNeo4j/ReadNeo4jData2Neo4j.java

@@ -17,6 +17,7 @@ public class ReadNeo4jData2Neo4j{
     public static PropertiesUtil propertiesUtil = new PropertiesUtil("query.properties");
     public static void main(String[] args) {
         String[] diseaseArray ={"慢性胃炎","急性胰腺炎","心脏病","肺部感染"};
+//        String[] diseaseArray ={"肺部感染"};
         NodeRelationUtil nodeRelationUtil = new NodeRelationUtil();
         Driver driver233 = nodeRelationUtil.getDriver();//读
         Driver driver232 = nodeRelationUtil.get232Driver();//写
@@ -45,7 +46,6 @@ public class ReadNeo4jData2Neo4j{
         List<String> diseaseNameList;
         String queryWord;
         StatementResult resultSet;
-
         diseaseNameList = new ArrayList<String>(Arrays.asList(diseaseArray));
         for (String diseaseName:diseaseNameList) {
             nodeRelationUtil.AddNode(driver,0,"Disease",diseaseName.replace("\"",""));//添加疾病
@@ -53,15 +53,42 @@ public class ReadNeo4jData2Neo4j{
             resultSet = session.run(queryWord);
             while (resultSet.hasNext()){
                 Record record = resultSet.next();
-                String drug = record.get("drug").toString();//药类
-                String label = record.get("label").toString();//类型
-                int p = Integer.parseInt(record.get("p").toString());//药类的排序
+                String drug = record.get("drug").toString().replace("\"","");//药类
+                String label = record.get("label").toString().replace("\"","");//类型
                 int p1 = record.get("p").asInt();
                 List<Object> collectName = record.get("collectName").asList();
-                System.out.println(drug+"\t"+label+"\t"+p+"\t"+collectName);
+                String s = collectName.get(0).toString();
+                nodeRelationUtil.AddNode(driver,0,"Drugs",drug);
+                nodeRelationUtil.addRelationWithProperty(driver,"Disease",diseaseName.replace("\"",""),"推荐",p1,"Drugs",drug);
+                for (Object o:collectName) {
+                    String medicationName = o.toString();
+                    nodeRelationUtil.AddNode(driver,0,"Medicine",medicationName);
+                    nodeRelationUtil.addRelation(driver,0,"Drugs",drug,"包含","Medicine",medicationName);
+                }
+            }
+            queryWord = propertiesUtil.getProperty("diseaseMedication").replace("diseaseName",diseaseName);
+            resultSet = session.run(queryWord);
+            while (resultSet.hasNext()){
+                Record record = resultSet.next();
+                double p1 = record.get("p").asDouble();
+                String medication = record.get("collectName").toString().replace("\"","");//类型
+                nodeRelationUtil.AddNode(driver,0,"Medicine",medication);
+                nodeRelationUtil.addRelationWithPropertyDouble(driver,"Disease",diseaseName.replace("\"",""),"推荐",p1,"Medicine",medication);
+            }
+            queryWord = propertiesUtil.getProperty("bigDrugAndSubDrugs").replace("diseaseName",diseaseName);
+            resultSet = session.run(queryWord);
+            while (resultSet.hasNext()){
+                Record record = resultSet.next();
+                String bigDrugs = record.get("big").toString().replace("\"","");//大类型
+                String subDrugs = record.get("sub").toString().replace("\"","");//小类型
+                nodeRelationUtil.AddNode(driver,0,"Drugs",bigDrugs);
+                nodeRelationUtil.AddNode(driver,0,"Drugs",subDrugs);
+                nodeRelationUtil.addRelation(driver,0,"Drugs",bigDrugs,"包含","Drugs",subDrugs);
+                nodeRelationUtil.addRelation(driver,0,"Disease",diseaseName.replace("\"",""),"推荐","Drugs",bigDrugs);
             }
         }
     }
+
     private static void from233to232(String[] diseaseArray,NodeRelationUtil nodeRelationUtil, Driver driver232, Session session) {
         List<String> diseaseList;
         String query;

+ 3 - 2
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -653,6 +653,7 @@ public class Neo4jAPI {
         String query = "";
         try {
             session = driver.session(AccessMode.WRITE);
+//            query = propertiesUtil.getProperty("serchCollect").replace("fildList",fildList);
             //判断是否有近义词
             query = "match (l)-[r:近义词]->(m)\n" +
                     "where l.name in  " + fildList + "\n" +
@@ -1052,11 +1053,11 @@ public class Neo4jAPI {
                          * 查找药类的忌用
                          */
                         Map<String, String> drugsUseMap = new HashMap<>();//key:药名 value:禁忌(慎用)
-                        query = "match (n:Disease{name:'急性胰腺炎'})-[:推荐]->(d:Drugs)<-[r0:慎用]-(m)\n" +
+                        query = "match (n:Disease{name:'"+diseaseName+"'})-[:推荐]->(d:Drugs)<-[r0:慎用]-(m)\n" +
                                 "where m.name in " + value + "" +
                                 "return d.name as ff,type(r0) as hh\n" +
                                 "union\n" +
-                                "match (n:Disease{name:'急性胰腺炎'})-[:推荐]->(d:Drugs)<-[r0:忌用]-(m)\n" +
+                                "match (n:Disease{name:'"+diseaseName+"'})-[:推荐]->(d:Drugs)<-[r0:忌用]-(m)\n" +
                                 "where m.name in " + value + "" +
                                 "return d.name as ff,type(r0) as hh";
                         result = tx.run(query);

+ 47 - 9
graph/src/main/java/org/diagbot/graph/util/NodeRelationUtil.java

@@ -122,6 +122,52 @@ public class NodeRelationUtil {
             if (session != null) session.close();
         }
     }
+    /**
+     * 添加带属性的关系
+     */
+    public void addRelationWithProperty(final Driver driver, final String fromlbl, final String fromval, final String relation,final Integer sort, final String tolbl, final String toval){
+        Session session = null;
+        try {
+            session = driver.session(AccessMode.WRITE);
+            session.writeTransaction(new TransactionWork<Integer>() {
+                @Override
+                public Integer execute(Transaction tx) {
+                    int result =0;
+                    String query = "MATCH (e:" + fromlbl + "{name:$src}), (c:" + tolbl + "{name:$dest}) " +
+                            "MERGE (e)-[r:" + relation + "{p:"+sort+"}]->(c) RETURN e.name, type(r), c.name";
+                    result = processRelation(tx, query, "src", fromval, "dest", toval);
+                    return result;
+                }
+            });
+        }catch (Exception ex) {
+            ex.printStackTrace();
+        } finally {
+            if (session != null) session.close();
+        }
+    }
+    /**
+     * 添加带属性的关系
+     */
+    public void addRelationWithPropertyDouble(final Driver driver, final String fromlbl, final String fromval, final String relation,final Double sort, final String tolbl, final String toval){
+        Session session = null;
+        try {
+            session = driver.session(AccessMode.WRITE);
+            session.writeTransaction(new TransactionWork<Integer>() {
+                @Override
+                public Integer execute(Transaction tx) {
+                    int result =0;
+                    String query = "MATCH (e:" + fromlbl + "{name:$src}), (c:" + tolbl + "{name:$dest}) " +
+                            "MERGE (e)-[r:" + relation + "{rate:"+sort+"}]->(c) RETURN e.name, type(r), c.name";
+                    result = processRelation(tx, query, "src", fromval, "dest", toval);
+                    return result;
+                }
+            });
+        }catch (Exception ex) {
+            ex.printStackTrace();
+        } finally {
+            if (session != null) session.close();
+        }
+    }
     /**
      * 为两个节点添加关系
      * @param fromlbl 标签类型
@@ -135,15 +181,6 @@ public class NodeRelationUtil {
         //两个节点之间,有关系,先删除
         try {
             session = driver.session(AccessMode.WRITE);
-//            session.writeTransaction(new TransactionWork<Integer>() {
-//                @Override
-//                public Integer execute(Transaction tx) {
-//                    String query = "MATCH (e:" + fromlbl + "{name:$src})-[r]->(c:" +
-//                            tolbl + "{name:$dest}) DELETE r";
-//                    int result = processRelation(tx, query, "src", fromval, "dest", toval);
-//                    return result;
-//                }
-//            });
             //为两个节点添加关系
             session.writeTransaction(new TransactionWork<Integer>() {
                 @Override
@@ -174,6 +211,7 @@ public class NodeRelationUtil {
         tx.run(query, parameters(srclbl, srcname, destlbl, destname));
         return 1;
     }
+
     private int processNode(Transaction tx, String query, String label, String val) {
         tx.run(query, parameters(label, val));
         return 1;

+ 3 - 12
graph/src/main/resources/bolt.properties

@@ -20,22 +20,13 @@ bolt112.user=neo4j
 bolt112.passwd=123456
 
 #\u63A8\u786E\u8BCA\u5904\u7406sql
-#\u67E5\u627E\u8FD1\u4E49\u8BCD\u548C\u5316\u9A8C\u548C\u8F85\u68C0\u9879\u76EE
-
-#searchJinyici=with fildList as data  unwind data as  fild \n \
-#match(d:Disease)-[R1:\u63A8\u8350]->(h)-[r:\u7ED3\u679C]->(l) \n \
-#where l.name=fild \n \
-#return l.name as zi,labels(l)[0] as jin,h.name as fu,labels(h)[0] as da \n \
-#union \n \
-#with fildList as data  unwind data as  fild  \n \
-#match(l)-[r:\u8FD1\u4E49\u8BCD]->(h) \n \
-#where l.name=fild \n \
-#return l.name as zi,labels(l)[0] as jin,h.name as fu,labels(h)[0] as da
-
+#\u67E5\u627E\u8FD1\u4E49\u8BCD
 searchJinyici=with fildList as data  unwind data as  fild  \n \
 match(l)-[r:\u8FD1\u4E49\u8BCD]->(h) \n \
 where l.name=fild \n \
 return l.name as zi,labels(l)[0] as jin,h.name as fu,labels(h)[0] as da
+#\u67E5\u627E\u8FD1\u4E49\u8BCD\u7CBE\u534E\u7248
+serchCollect=match (n)-[r:\u8BCA\u65AD\u4F9D\u636E|:\u8FD1\u4E49\u8BCD]->(e) where n.name in fildList return n.name as fild,collect(distinct type(r)) as typeCollect
 #\u67E5\u627E\u80FD\u63A8\u51FA\u8BCA\u65AD\u4F9D\u636E\u7684\u8BCD
 searchCondition=with newList as data unwind data as row\n \
 match (l)-[r:\u8BCA\u65AD\u4F9D\u636E]->(m)\n \

+ 5 - 1
graph/src/main/resources/query.properties

@@ -2,4 +2,8 @@
 # \u7B2C\u4E00\u6B65,\u75BE\u75C5\u5230\u7C7B,\u7C7B\u5305\u542B\u836F
 diseaseDrugsMedication=\
   match(d:Disease{name:'diseaseName'})-[r:\u63A8\u8350]->(h)-[r1:\u5305\u542B]->(l:Medicine) \
-  return d.name,h.name as drug,labels(h)[0] as label,r.p as p,collect(l.name) as collectName
+  return d.name,h.name as drug,labels(h)[0] as label,r.p as p,collect(l.name) as collectName
+# \u7B2C\u4E8C\u6B65,\u75BE\u75C5\u548C\u836F\u7684\u5173\u7CFB
+diseaseMedication=match(d:Disease{name:"diseaseName"})-[r:\u63A8\u8350]->(l:Medicine) return d.name,r.rate as p,l.name as collectName
+# \u7B2C\u4E09\u6B65,\u5927\u7C7B\u548C\u5B50\u7C7B\u7684\u5173\u7CFB
+bigDrugAndSubDrugs=match(d:Disease)-[r:\u63A8\u8350]->(s:Drugs)-[r1:\u5305\u542B]->(j:Drugs)where d.name="diseaseName" return s.name as big,j.name as sub