Neo4j开发总结

    xiaoxiao2022-07-07  180

    1、查看两个节点之间的关系使用:type()函数

    MATCH (:paper)-[r]->(:field_sub) RETURN type(r)

    2、DISTINCT()去重函数注意:该函数要放在RETURN()后面,并且后面加逗号(,).放在最后会报错

    //正确代码 MATCH (pe:person)-[:write_paper]->(pa:paper) RETURN DISTINCT(pe.nationality), pe.nationality AS country, COUNT(pa) //报错代码 MATCH (pe:person)-[:write_paper]->(pa:paper) RETURN pe.nationality AS country, COUNT(pa), DISTINCT(pe.nationality) //报错信息 Neo.ClientError.Statement.SyntaxError Neo.ClientError.Statement.SyntaxError: Unknown function 'DISTINCT' (line 5, column 5 (offset: 99)) " DISTINCT(pe.nationality)" ^

    3、查询几度关系数据

    MATCH p=(pe1:Person)-[*1..4]-(pe2:Person) RETURN p LIMIT 25

    4、查询两个节点间的所有关系(不确定关系)

    MATCH (o1:organization)-- (p:project) -- (o2:organization) WHERE o1.orgId = {orgId1} AND p.startYear >= {startYear} AND p.startYear <= {endYear} RETURN o2.orgId AS orgId, o2.org_name AS orgName LIMIT 100

    5、java代码中模糊检索Neo4j

    #Neo4j图库中查询语句 MATCH (n:DataSet{code:'uci'}) WHERE n.name =~ '(?i).*blog.*' RETURN n.datasetId AS datasetId, n.name as name LIMIT 10 #java中查询 MATCH (n:DataSet{code:'uci'}) WHERE n.name =~ {name} RETURN n.datasetId AS datasetId, n.name as name LIMIT 10 将((?i).*blog.*)整体作为一个参数传入 代码中提前拼接好:name = "(?i).*" + name + ".*";

    6、case、when

    "MATCH (org:organization) -[ogor:org_own_reward]->(rd:reward) " + " WHERE toInteger(subString(ogor.date,0,4)) >= #startYear and toInteger(subString(ogor.date,0,4))<= #endYear " + " and rd.rewardType = '国际科学技术合作奖' " + " RETURN " + " case " + " when ogor.type is not null " + " then ogor.type " + " else " + " '组织' " + " end " + " AS rewardArea,count(ogor) as statis " + " ORDER BY rewardArea ";

    7、处理字符串转数字

    toInteger(substring(pj.startDate,0,4))

    8、分页limit:对Neo4j中通过union后结果进行分页(教程:需要安装apoc插件;jar包地址:GitHub)

    CALL apoc.cypher.run(" MATCH (n:Disease) RETURN n.name AS field1, n.desc AS field2 ORDER BY n.field1 ASC LIMIT 100 UNION MATCH (n:Symptom) RETURN n.name AS field1, n.name AS field2 ORDER BY n.field1 ASC LIMIT 100 ",{}) yield value return value.field1,value.field2 order by value.field1 limit 100 @Query("CALL apoc.cypher.run( {cql} ,{}) " + "yield value " + "RETURN value.achName AS achName, value.psName AS psName, value.psId AS psId, value.influence AS influence, value.achId AS achId " + "SKIP {skip} LIMIT {limit}") List<Map<String, Object>> queryAwardByPersonId(@Param("cql") String cql, @Param("skip") int skip, @Param("limit") int limit);

     

    最新回复(0)