wordpress看文網(wǎng)站口碑營銷案例及分析
接Java初始化大量數(shù)據(jù)到Neo4j中(一)繼續(xù)探索,之前用create命令導入大量數(shù)據(jù)發(fā)現(xiàn)太過耗時,查閱資料說大量數(shù)據(jù)初始化到Neo4j需要使用neo4j-admin import
業(yè)務數(shù)據(jù)說明可以參加Java初始化大量數(shù)據(jù)到Neo4j中(一),這里主要是將處理好的節(jié)點數(shù)據(jù)和關系數(shù)據(jù)分別導出為csv
在這里插入代碼片
入口controller.java
//導出節(jié)點數(shù)據(jù)到csv文件中
@GetMapping("exportNodeData")
public void exportNodeData(HttpServletResponse response) {service.exportNodeData(response);
}//導出關系數(shù)據(jù)到csv文件中
@GetMapping("exportRelationData")
public void exportRelationData(HttpServletResponse response) {service.exportRelationData(response);
}
service.java
//導出節(jié)點數(shù)據(jù)@Overridepublic void exportNodeData(HttpServletResponse response) {//節(jié)點數(shù)據(jù),按照自己的實際業(yè)務添加,我這里對應的是所有表的數(shù)據(jù),因為我業(yè)務中所有表結果基本一樣,也即節(jié)點屬性都一樣。每個表的數(shù)據(jù)一個map,key是表名作為節(jié)點的標簽Map<String, List<NodeData>> nodeDataMap;List<Map<String,String>> data = new ArrayList<>();for(String key:nodeDataMap.keySet()){List<NodeData> dataList = nodeDataMap.get(key);if (StringUtils.isEmpty(key) || dataList ==null || dataList .isEmpty()) {continue;}for (NodeData nodeData:dataList ) {Map<String,String> map = new HashMap<>();String id = nodeData.getId();String name = nodeData.getName();String table = nodeData.getName();//因為不同表的id會重復,需要一個不重復的值作為節(jié)點唯一值(我這里用的是表id拼接表數(shù)據(jù)id)String uniqueValue = nodeData.getUniqueValue(); map.put(":LABEL",table );map.put("id",id);map.put("name",name);map.put("uniqueValue:ID",uniqueValue);data.add(map);}}try {response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + new String("nodeimport.csv".getBytes(StandardCharsets.UTF_8), "ISO8859-1"));response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());CsvWriter csvWriter = CsvUtil.getWriter(response.getWriter()) ;csvWriter.writeBeans(data);csvWriter.close();} catch (IOException e) {e.printStackTrace();}
}//導出關系數(shù)據(jù)@Overridepublic void exportRelationData(HttpServletResponse response) {//關系數(shù)據(jù),將每一個表數(shù)據(jù)的關系作為RelationData實體List<RelationData> relationDatas;List<Map<String,String>> data = new ArrayList<>();for (RelationData relation : relationDatas) {Map<String,String> map = new HashMap<>();String relationName = relation .getRelationName();String id = relation .getId();//因為節(jié)點是通過表id拼接數(shù)據(jù)id,所以關系這里也需要加上拼接后不重復的值//開始節(jié)點唯一的值String uniqueStartValue = relation .getUniqueStartValue();//結束節(jié)點唯一的值String uniqueEndValue = relation .getUniqueEndValue();map.put("relationName",relationName) ;map.put("id",id) ;map.put(":START_ID",uniqueStartValue) ;map.put(":END_ID",uniqueEndValue) ;map.put(":TYPE",relationName) ;data.add(map);}try {response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + new String("relationimport.csv".getBytes(StandardCharsets.UTF_8), "ISO8859-1"));response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());CsvWriter csvWriter = CsvUtil.getWriter(response.getWriter()) ;csvWriter.writeBeans(data);csvWriter.close();} catch (IOException e) {e.printStackTrace();}}
CsvUtil用的是Hutool中的工具類,引入下面依賴即可
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version></dependency>
解釋:
節(jié)點中的,
uniqueValue:ID 冒號前面可以隨便寫,冒號后端必須是ID,標識全局id,不可重復
:LABEL:這個是標簽名,必須這樣寫
除了這兩個以外的字段都是作為節(jié)點的屬性。
導出的nodeimport.csv文件如下
關系中:
:START_ID:開始節(jié)點的唯一值
:END_ID:結束節(jié)點的唯一值
:TYPE:關系類型
除這三個外的字段都作為關系
導出的relationimport.csv文件如下:
之后找到Neo4j安裝目錄,找到import目錄,將這個兩個導出的文件放到import目錄下
刪除data\databases目錄下的文件(neo4j-admin import要求是空文件 ) ,停掉Neo4j
cmd進入到bin目錄,執(zhí)行下面語句
neo4j-admin import --mode=csv --nodes "E:\work_soft\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import\nodeimport.csv" --relationships "E:\work_soft\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import\relationimport.csv" --ignore-extra-columns=true --ignore-missing-nodes=true --ignore-duplicate-nodes=true
成功之后啟動Neo4j,查看數(shù)據(jù)即可。