【问题标题】:How to retrieve a Neo4 relationship by property in Java?如何在 Java 中按属性检索 Neo4 关系?
【发布时间】:2016-06-21 18:27:06
【问题描述】:

我正在开发 Neo4j 插件,需要按属性值检索关系。

我可以访问 Neo4j GraphDatabaseService,它有一个非常方便的方法GraphDatabaseService.findNode(Label label, String property , String value)

我正在寻找这种方法的对应关系,例如GraphDatabaseService.findRelationship(RelationshipType type, String property , String value)

这存在吗?它在路线图上吗?还有其他方法吗?

【问题讨论】:

  • 这不存在并且不在路线图上,唯一的方法是使用 Lucene 索引来索引属性值。您可以查看 graphaware-uuid 以了解我们如何处理关系 uuid。
  • 目前只有模式索引支持节点,如果没有节点周围的上下文,您将在哪些用例中按值查找关系?
  • 您可以通过 Java API 访问手动关系索引,这非常好,因为您既可以通过属性找到 rel,也可以在它们的任一端节点的上下文中找到 rel。

标签: java neo4j graphaware


【解决方案1】:

目前只有模式索引支持节点。

在没有周围节点上下文的情况下按值查找关系的用例是什么?

您可以通过 Java API 访问手动关系索引,这非常好,因为您既可以通过属性来访问 find relationships,也可以在它们的任一端节点的上下文中访问。如果您为每个 rel 类型创建一个索引,那么对于具有许多关系的节点也可以通过传入开始或结束节点来过滤掉一些关系。 这就是我在 APOC 过程库中添加的支持。

但您必须手动将关系添加到该索引。

【讨论】:

  • 谢谢迈克尔!我的用例是 neo4j-to-elasticsearch 插件。我正在添加对关系索引的支持,并希望通过 UUID 检索关系(当关系与 ES 中的搜索查询匹配时)。根据 Christophe 的回答,我想我只需要从 ElasticSearch 插件访问 UUID 插件,我会很好:)
【解决方案2】:

总结 Michael 和 Christophe 的回答:

  • 未实现通过属性值与架构索引查找关系
  • 可以使用手动索引按属性查找关系
  • GraphAware's UUID Neo4j plugin 就是为 UUID 做到这一点(使用手动索引)

要通过 UUID 获取关系,代码如下:

public Relationship getRelByUuid(GraphDatabaseService database, String uuid) {
    UuidReader reader = new DefaultUuidReader(
        getStartedRuntime(database).getModule(UuidModule.class).getConfiguration(),
        database
    );
    return database.getRelationshipById(uuidReader.getRelationshipIdByUuid(uuid));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2011-08-03
    • 2019-08-05
    相关资源
    最近更新 更多