cypher索引所有节点上的公共属性

时间:2015-03-30 18:40:01

标签: java neo4j cypher

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

我在所有类型的节点标签上都有'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)现在没用了,因为这个密码查询IMHO将无法再使用索引,因为我没有传递任何节点标签。

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

由于我的getByNodeId()方法的整个要点是在所有节点上都是通用的,我不能给这个cypher查询一个节点标签。那我该怎么办呢我的两个问题是:

  • 如何通过cypher告诉neo4j在所有节点标签上编制索引
  • 如何编写使用不基于节点标签的索引但基于节点属性的密码查询。

注意:

  • 我使用cypher是必不可少的,因为我使用的是neo4j-jdbc 并且他们没有方法来创建自动索引或访问 自动索引器(至少不是我所知道的。)

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

1 个答案:

答案 0 :(得分:3)

节点可以有多个标签。

因此,如果您让所有节点共享一个公共标签,比如Base(除了它们当前拥有的任何标签),您只需要一个覆盖所有节点的索引:

CREATE INDEX ON :Base(nodeId)