根据新的索引规则,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/