【问题标题】:Select a node by name in NEO4J in Java在 Java 中的 NEO4J 中按名称选择节点
【发布时间】:2013-03-12 17:55:54
【问题描述】:

我正在使用嵌入 Java 的 NEO4J。 假设有一个名为 NODE_abc 的节点,它有一些属性。 我想选择节点,以便我可以使用 getProperty() 获取属性。

我想选择 NODE_abc 作为 mynode,以便我可以使用 mynode.getProperty() 来获取节点“NODE_abc”的属性。

节点“NODE_abc”的名称存储在一个变量中, 说字符串 str="NODE_abc"

【问题讨论】:

    标签: java neo4j graph-databases


    【解决方案1】:

    我同意 tstorms 关于索引和执行密码查询的观点。但是,我要指出,节点标识符是短暂的。它们在有限的时间范围内有用,但随后会被回收。因此,一个节点在多次执行(或垃圾收集器运行后)不一定具有相同的标识符。

    通常,在 Neo4J 中,如果您需要通过属性(而不是通过遍历)来查询节点,则创建索引。例如,您可以创建一个名为“actors”的索引:

    IndexManager index = graphDb.index();
    Index<Node> actors = index.forNodes( "actors" );
    

    如果索引不存在,此命令将创建它。否则,它返回现有索引。

    但是,与 SQL 不同的是,在 Neo4J 中,您必须手动将节点添加到索引中:

    Node reeves = graphDb.createNode();
    reeves.setProperty( "name", "Keanu Reeves" );
    actors.add( reeves, "name", reeves.getProperty( "name" ) );
    

    然后您可以查询与指定查询匹配的所有个节点的索引(索引不保证唯一性):

    IndexHits<Node> hits = actors.get( "name", "Keanu Reeves" );
    Node reeves = hits.getSingle();
    

    来源:https://neo4j.com/docs/java-reference/current/indexing/#indexing-create

    请注意,Neo4J 索引实际上并不从节点读取属性,您必须明确告诉它如何索引节点。您可以提供任意一条未存储在节点上的索引信息,但我不建议这样做。

    【讨论】:

    • 您可以轻松地创建一个自动索引索引,如下所述:docs.neo4j.org/chunked/milestone/auto-indexing.html 您只需实例化您的自动索引器,然后定义要自动添加的属性
    • 谢谢,所以最后我明白的是,与其命名节点,不如设置一个像 "Name:NODE_abc" 这样的属性,然后查询它。
    【解决方案2】:

    不确定您对名为“node_abc”的节点的含义。节点没有名称,但您可以通过 node.getId() 获取唯一的 id (=identifier)。所以我的猜测是你有一个带有 name 属性的节点。如果您在 name 属性上有索引,则可以通过索引 (indexing search) 检索它。如果您有节点的标识符,您还可以通过 CYPHER 查询 (executing cypher queries) 检索它。

    【讨论】:

    • 感谢 tstorms 的回答,我的意思是节点的名称,当我创建节点时,我会像这样创建它。节点 A; A=graphDB.createNode();这里我称“A”为节点的名称。
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多