Tag: neo4j cypher

通过java检索neo4j节点数据时出错

我通过talend将大约60k个节点加载到neo4j中。 我想通过java访问这些节点。 Java代码只能获取neo4j本身附带的单个节点,即第0个节点。 我的Java代码是: package com.Neo4J; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.naming.spi.DirStateFactory.Result; import org.neo4j.cypher.javacompat.ExecutionEngine; import org.neo4j.cypher.javacompat.ExecutionResult; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.factory.GraphDatabaseFactory; import org.neo4j.helpers.collection.IteratorUtil; import org.neo4j.kernel.impl.util.FileUtils; import org.neo4j.tooling.GlobalGraphOperations; public class CaseNeo4J { private static final String DB_PATH = “data/graph.db”; GraphDatabaseService graphDataService; String nodeResult, resultString, columnsString; […]

意外的空值neo4j

我不知道为什么我无法获得movie领域的价值。 我调试它,我发现movie是空的。 我张贴了一张照片,你会看到它 。 请给我一些建议。 我确信我已经成功建立了这种关系,可能在推荐方面出错了。 类还是密码? public interface MovieRepository extends GraphRepository { @Query(“match (user:User {login: {0}})-[r:RATED]->(movie)(otherMovie) ” + ” where r.stars >= 3 and r2.stars >= r.stars and r3.stars >= r.stars ” + ” with otherMovie, avg(r3.stars) as rating, count(*) as cnt” + ” order by rating desc, cnt desc” + ” return otherMovie […]

直接邻居关系密码查询性能

这个问题类似于这两个: 16283441,15456345 。 更新 :这是一个数据库转储 。 在190K节点和727K关系的数据库(以及128MB的数据库磁盘使用)中,我想运行以下查询 : START start_node=node() MATCH (start_node)-[r:COOCCURS_WITH]-(partner), (partner)-[s:COOCCURS_WITH]-(another_partner)-[:COOCCURS_WITH]-(start_node) RETURN COUNT(DISTINCT s) as num_partner_partner_links; 在这个db中,90%的节点有0个关系,剩下的10%有1到670个,所以这个查询可以返回的最大网络不可能有超过220K的链接(670 * 670)/ 2)。 在partner_partner_links小于10K的节点上,查询需要2-4秒,当被查出时。 对于更多连接的节点(20-45K链路),它需要大约40-50秒(不知道连接最多的节点需要多少)。 指定关系方向有点但不多(但是查询不会返回我需要它返回的内容)。 在一个最大的节点上分析查询说: ==> ColumnFilter(symKeys=[” INTERNAL_AGGREGATE48d9beec-0006-4dae-937b-9875f0370ea6″], returnItemNames=[“num_partner_links”], _rows=1, _db_hits=0) ==> EagerAggregation(keys=[], aggregates=[“( INTERNAL_AGGREGATE48d9beec-0006-4dae-937b-9875f0370ea6,Distinct)”], _rows=1, _db_hits=0) ==> PatternMatch(g=”(partner)-[‘r’]-(start_node)”, _rows=97746, _db_hits=34370048) ==> TraversalMatcher(trail=”(start_node)-[ UNNAMED3:COOCCURS_WITH WHERE true AND true]-(another_partner)-[s:COOCCURS_WITH WHERE true AND true]-(partner)”, _rows=116341, _db_hits=117176) […]

Cypher使用Neo4j java驱动程序查询执行时间

我试图用java驱动程序找出我的Cypher查询的执行时间。 Session session = driver.session(); session.run( “CREATE (a:Person {name:’Arthur’, title:’King’})” ); StatementResult result = session.run( “Profile MATCH (a:Person) WHERE a.name = ‘Arthur’ RETURN a.name AS name, a.title AS title” ); 但我无法在StatementResult或ResultSummary中找到它,它由StatementResult.consume(query)返回。 我可以在ResultSummary从ProfiledPlan访问db命中,但是没有关于时间的信息。 有什么办法可以使用neo4j java驱动程序访问Cypher查询执行时间吗?

Neo4j – 按相关性排序

我想在Neo4j中按相关性订购返回的数据。 出于我的目的,相关性可以简化为“我正在搜索的单词的索引”,其中较低的索引具有较高的相关性。 例 我有这三个节点: node : { Label: PROD properties : { name: “Bearing replacement Skateboard” } } node : { Label: PROD properties : { name: “Skateboard” } } node : { Label: PROD properties : { name: “L7 Skateboard” } } 我希望他们按此订单退回: node : { Label: PROD properties : { name: “Skateboard” // […]

如何在java中使用cypher加载CSV文件?

我是新来的密码。 我想在java中使用cypher加载csv。 我用Google搜索并发现了以下内容 LOAD CSV WITH HEADERS FROM “http://neo4j.com/docs/2.3.1/csv/import/movies.csv” AS csvLine MERGE (country:Country { name: csvLine.country }) ….. 如何将此加载csv查询用于java代码。 我试过这样的事。 import java.io.File; import java.io.IOException; import java.util.Map; import java.util.Map.Entry; import javax.naming.spi.DirStateFactory.Result; import org.neo4j.cypher.javacompat.ExecutionEngine; import org.neo4j.cypher.javacompat.ExecutionResult; import org.neo4j.graphdb.Direction; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.factory.GraphDatabaseFactory; import org.neo4j.kernel.impl.util.FileUtils; public class test_new { private […]

在Neo4J中,如何在Java的cypher查询中将标签设置为参数?

我在Java中使用Neo4J中的cypher参数时遇到问题。 我运行嵌入的数据库。 代码应该是这样的(GraphDB.cypher直接转到ExecutionEngine) HashMap parameter = new HashMap(); parameter.put(“theLabel1”, “Group”); parameter.put(“theRelation”, “isMemberOf”); parameter.put(“theLabel2”, “Person”); GraphDB.cypher(“MATCH (n1:{theLabel1})-[r:{theRelation}]->(n2:{theLabel2}) RETURN n1, r, n2”, parameter); 但它以此例外结束 Exception in thread “main” Invalid input ‘{‘: expected whitespace or a label name (line 1, column 11) “MATCH (n1:{theLabel1})-[r:{theRelation}]->(n2:{theLabel2}) RETURN n1, r, n2” 文档(和教程)告诉使用{}来覆盖参数,但这也用作属性的cypher json表示法。 @参见http://docs.neo4j.org/chunked/milestone/tutorials-cypher-parameters-java.html 是否有另一种方法来解决此问题,而不是像这样(或使用其他模板方法)构建查询字符串 GraphDB.cypher(“MATCH (n:” + labelName + “)-[r:” […]

使用REST优化大批量插入Neo4j

我需要通过REST API的Batch端点将大量节点与它们之间的关系插入Neo4j,大约5k记录/秒(仍在增加)。 这将是24×7的连续插入。 每条记录可能只需要创建一个节点,但其他记录可能需要创建两个节点和一个关系。 我可以通过更改程序或修改Neo4j的设置来提高插入的性能吗? 我到目前为止的进展: 1.我一直在测试Neo4j,但是我无法获得所需的性能 测试服务器盒:24核+ 32GB RAM Neo4j 2.0.0-M06作为独立服务安装。 在同一台服务器上运行我的Java应用程序。(Neo4j和Java应用程序将来需要在自己的服务器上运行,因此无法使用嵌入式模式) REST API端点:/ db / data / batch(target:/ cypher) 使用模式索引,约束,MERGE,CREATE UNIQUE。 2.我的架构: neo4j-sh (0)$ schema ==> Indexes ==> ON :REPLY(created_at) ONLINE ==> ON :REPLY(ids) ONLINE (for uniqueness constraint) ==> ON :REPOST(created_at) ONLINE ==> ON :REPOST(ids) ONLINE (for uniqueness constraint) ==> ON :Post(userId) ONLINE […]