问题标签 [neo4j-java-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
neo4j - Neo4j Cypher 找到探索排序关系的所有路径
我一直在努力寻找一种方法来找到两个节点之间的所有路径(最大长度),同时通过对将要探索的关系(通过它们的一个属性)进行排序来控制 Neo4j 的路径探索。
为了清楚起见,假设我想在两个节点之间找到 K 条最佳路径,直到最大长度为 M。查询将如下所示:
到目前为止,一切都很好。但是可以说路径的关系有一个称为“优先级”的属性。我想要的是编写一个查询,告诉 Neo4j 在路径探索的每个步骤中应该首先探索哪些关系。
我知道当我使用 java 库和嵌入式数据库时,这是可能的(通过实现 PathExpander 接口并将其作为 Java 中 GraphAlgoFactory.allSimplePaths() 函数的输入)。但现在我试图找到一种方法,使用 Bolt 或 REST api 在服务器模式数据库访问中执行此操作。
有没有办法在服务器模式下做到这一点?或者在服务器模式下访问图形时使用 Java 库函数?
jdbc - 参数化 Cypher 查询和 Neo4J JDBC 准备语句
我有一个参数化的密码查询,看起来与此类似 -
现在我想从 JDBC 准备语句中传递 {relations} 变量——这将是我想要循环的对象数组。
java - 在 Neo4j 中,有没有办法在使用 Java API 时限制路径中的节点和关系类型?
我有源节点和目标节点,我想限制路径中的节点和关系类型。我正在使用Neo4j Java API。
考虑以下玩具示例,
我们有三个人节点 A、B 和 C。
源节点: A和目标节点: B。它们之间可能存在许多其他类型的路径。我想将路径限制为特定格式,例如-
(person) -[worksAt]-> (company) -[CompetitorOf]-> (company) <-[worksAt]- (person)
这可以通过密码查询很容易地实现,但我想知道有什么方法可以使用 Java API 来实现。
笔记:
- 请不要建议限制路径长度,这并不能解决问题。我想限制路径中的节点和关系类型。
- 上面提到的例子是玩具例子。我正在尝试工作的图表更复杂,并且有许多可能的路径无法遍历和验证单个路径。
java - Neo4j 通过特定属性 Java API 获取 Node
有没有办法使用 Java API 通过特定属性获取节点?具体来说:
- 按名字
- 按标签
- 按属性 - (各种属性)
我发现的唯一功能是:
仅支持一个属性。还是我必须使用 Cypher 来获得这个?
java - 如何使用循环在 neo4j 中自动命名节点?
我有字符串列表,我想将所有元素导入图形数据库。通过说导入我的意思是,我想将字符串设置为节点的属性。名单的规模将是巨大的。那么有没有办法自动化节点命名?因为按照传统方式,如果列表的大小为 100,则必须通过调用 graphDb.createNode() 100 次来创建节点。
java - 防止覆盖 Neo4J 图形数据库中的数据
我正在使用Neo4J的社区版本作为我的图形数据库。我想防止在重建图形时覆盖重复数据。
例如:假设我的代码从关系数据库中获取一些数据并创建 Neo4J 图。今天构建的图表大小为 1 GB。第二天,当我再次构建图表时,它的大小变为 2.1 GB,尽管我的关系数据库中新添加的数据只有 0.1 GB。
为什么 Neo4J 会再次创建已经存在的节点?
Neo4J是否具有一些智能来识别新数据并仅创建较新的节点并防止重新构建已经存在的节点?
neo4j - 如何(密码)从用于 Neo4j 3.x 的 Java 程序查询 Neo4j 嵌入式图形数据库?
自从我上次使用 Neo4j(里程碑 2.0 到 3.0)以来,它已经发展了很多。我想使用带有嵌入式图形数据库(GraphDatabaseService)的java程序中的cypher。
我曾经创建一个 ExecutionEngine 并从那里开始。
看来,现在首选的方法是为此目的使用 org.neo4j.driver.*。
我从 Neo4j 3.0.7 获得的库中似乎没有这个包。
无论如何我可以使用java对嵌入式图形数据库执行密码查询吗?
java - Neo4j 语句结果遍历
我目前正在 Java 应用程序中使用 Neo4j 数据库,版本 3.0.3,使用 Neo4j jdbc 驱动程序版本 3.0.1(是的,我知道它们不匹配,但我认为现在还可以),并运行查询非常具体。在使用 JDBC 库编写密码查询时,我确保在节点上使用标签并在关系上使用类型。
我的数据集是一个知道其他 Person 节点的 Person 节点网络。KNOWS 关系上有一个日期,以便跟踪该连接的建立时间。我想对两个不同的 Person 节点之间的路径进行一些数据挖掘,如下图所示。随着人们开始认识越来越多的人,我想看看我的端节点是否存在未知关系。这要求我检查开始和结束 Person 之间的路径上的 Person 节点,以及可能创建这些关系的日期。
我运行了一个非常具体的查询,至少我是这么认为的,今天在 neo4j 浏览器功能和我的 Java 代码中,
上面的查询一共返回了(garret)和(adam)之间的30条路径。Neo4j 浏览器中该查询的 PROFILE 显示它返回 38 毫秒。所以肯定看起来快如闪电。
使用 StatementResult 对象将该查询连接到我的 Java 代码中并执行查询,我发现当我调用 list() 方法时,如下所示,它的运行时间是42.7 秒!
我的问题是这样的:
- 为什么 list() 命令需要这么长时间?
- 处理 Neo4j 结果集的最佳方法是什么?
- 我是否应该从 PROFILE 运行中查看其他有助于确定 .list() 调用是否最终会花费很长时间的东西?
我正处于这个项目的早期阶段,但随着我的数据集的增长,现在获取结果的 42.7 秒肯定会大幅增长。我想从社区那里得到一些建议,什么是最大程度地减少从 StatementResult 检索数据的延迟的最佳方法。
我很感激你们可以提供的所有建议。
neo4j - Neo4J Java Native APIs vs Traversal APIs vs Cypher
有没有人做过 Neo4J Java Native APIs、Traversal APIs 和 Cypher 的性能评估。从性能的角度来看,上述三个选项中的哪一个会给我带来更好的结果?另外,对于写操作,我应该使用 Native java APIs 还是 cypher。是否有可能在本机 API 中批量执行数据库操作,以便它只访问数据库一次,而不是每次创建节点/关系。
java - 使用 Neo4j java 驱动程序的 Cypher 查询执行时间
我正在尝试使用 java 驱动程序找出我的 Cypher 查询的执行时间。
但我在StatementResult或ResultSummary中的任何地方都找不到它,它由StatementResult.consume(query)
.
ProfiledPlan
我可以从in访问 db hits ,ResultSummary
但没有关于时间的信息。
有什么方法可以使用 neo4j java 驱动程序访问 Cypher 查询执行时间?