在数据库上创建Neo4j索引

时间:2012-06-23 15:35:42

标签: neo4j

我正在尝试Neo4j,看看它能做些什么。我的数据库包含大约54000个节点和10M关系(2种关系类型),这些关系是使用TSV文件中的https://github.com/jexp/batch-import导入的。我发现的是,需要索引才能在合理的时间内获得查询结果。

我想要做的一个典型查询是列出以某种类型连接的节点,并且连接节点具有某些值。类似的东西:

START 
    a=node(*) 
MATCH 
    (a)-[r]->(b) 
WHERE 
    id(a) <> 0 
    AND id(b) <> 0 
    AND type(r) = 'ASSOCIATION' 
    AND a.attr1 = 'value' 
    AND b.attr1 = 'value' 
RETURN 
    a, b LIMIT 200. 

当然这个查询永远不会完成。

  1. 考虑到这一点,在现有数据库上进行此类查询的最简单方法(批量创建?)关系索​​引是什么?和具有特定属性值的节点的索引?

  2. 这可以通过网络控制台完成,还是之后完成?通过阅读neo4j手册,我了解到你想要编写一个自定义的java实现,它逐个节点地加载数据并在创建数据库时构建索引。我个人喜欢使用python,但是即使导入当前的数据库,python绑定也太慢了。

1 个答案:

答案 0 :(得分:1)

您是否正在寻找特定的开始?

如果没有,您可以尝试索引关系,然后在开始时将它们拉出来,然后从那里开始:

START 
    specificRelationship=relationship:RelIndex(key='value')
MATCH
    a-[specificRelationship]->b
WHERE
    AND a.attr1 = 'value' 
    AND b.attr1 = 'value' 
RETURN 
    a, b LIMIT 200

回答你的问题:

  1. 您可以在“关系”或“节点”上创建任何类型的索引,您可以选择要查找的索引。我通常首先看到Node的特殊性,您可以根据单独定义的属性通过键/值对检索。

  2. 我没有在Python中完成此操作,但您可以轻松地在Java中加载,如果您想执行此查询,可以通过Neo4j的Web控制台执行此操作,或者如果您执行此操作,则可以通过Java执行此操作。 #39;我想对这些信息做点什么。