java - 所有节点上的密码索引公共(public)属性

标签 java neo4j cypher

根据新的索引规则,auto_index 将在未来消失,预计将使用 cypher 创建索引。根据这种新方法,要 inode 属性,您必须提供节点标签。

我在所有类型的节点标签上都有一个“nodeId”属性 - 用户、员工、银行、汽车等。我曾经自动索引此属性来检索任何类型的节点,如果它的nodeId是已知的。请注意,由于自动索引不需要我提供节点标签,因此我可以做我所做的事情。

ReadableIndex<Node> readableIndex = this.graphDatabaseService.index().getNodeAutoIndexer().getAutoIndex();
readableIndex.get("nodeId", "0").getSingle();

但是使用新样式,我必须为每个节点标签的 nodeId 属性创建索引。所以我必须这样做:

create index on :User(nodeId)
create index on :Employee(nodeId)
...

此外,我的方法 getByNodeId(String nodeId) 现在毫无用处,因为这个密码查询恕我直言将无法再使用索引,因为我没有传递任何节点标签。

match (node) where node.nodeId = {nodeId} return node;

由于我的 getByNodeId() 方法的重点是在所有节点上通用,因此我无法为该密码查询提供节点标签。那么我应该在这里做什么呢。我的两个问题是:

  • 如何通过 cypher 告诉 neo4j 在所有节点标签上建立索引
  • 如何编写一个密码查询,该查询使用的索引不是基于节点标签,而是基于节点属性。

注意:

  • 使用 cypher 对我来说至关重要,因为我正在使用 neo4j-jdbc 他们没有方法创建自动索引或访问 自动索引器(至少我不知道)。

  • 有些人可能建议我更改 neo4j.properties 以启用 那里有自动索引,但我不喜欢更改配置文件。我 想在我的程序中做到这一点。无论如何,这只能解决 首要问题。第二期仍然存在。

最佳答案

一个节点可以有多个标签。

因此,如果您让所有节点共享一个通用标签,例如 Base (除了它们当前拥有的任何标签之外),您只需一个涵盖所有节点的索引即可:

CREATE INDEX ON :Base(nodeId)

关于java - 所有节点上的密码索引公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29353718/

相关文章:

java - 使用 neo4j 嵌入式 java api 为关系添加权重

performance - 处理大额交易: any time/memory tradeoffs?

neo4j - 返回总节点数和有限集的Cypher

java - 构建具有不同列数的 html 表

java - 如何打乱键值对?

java - 在 Java 中,什么时候 {a,b,c,...} 数组简写不合适,为什么?

java - 为什么 ExecutorService 没有被频繁执行

java - 如何编写 @QueryResult 类以正确捕获密码结果。 (未经反复试验)

spring - 在深度 > 0 的 FindBy Spring 数据 Neo4J 查询中指定方向

indexing - Neo4j 数据库索引