我正在尝试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.
当然这个查询永远不会完成。
考虑到这一点,在现有数据库上进行此类查询的最简单方法(批量创建?)关系索引是什么?和具有特定属性值的节点的索引?
这可以通过网络控制台完成,还是之后完成?通过阅读neo4j手册,我了解到你想要编写一个自定义的java实现,它逐个节点地加载数据并在创建数据库时构建索引。我个人喜欢使用python,但是即使导入当前的数据库,python绑定也太慢了。
答案 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
回答你的问题:
您可以在“关系”或“节点”上创建任何类型的索引,您可以选择要查找的索引。我通常首先看到Node的特殊性,您可以根据单独定义的属性通过键/值对检索。
我没有在Python中完成此操作,但您可以轻松地在Java中加载,如果您想执行此查询,可以通过Neo4j的Web控制台执行此操作,或者如果您执行此操作,则可以通过Java执行此操作。 #39;我想对这些信息做点什么。