3

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

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

节点“NODE_abc”的名称存储在一个变量中,比如 String str="NODE_abc"

4

2 回答 2

9

我同意 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 索引实际上并不从节点读取属性,您必须明确告诉它如何索引节点。您可以提供任意一条信息,用于索引未存储在节点上的信息,但我不建议这样做。

于 2013-03-12T19:59:29.503 回答
3

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

于 2013-03-12T18:25:10.443 回答