2

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

我想做的典型查询之一是列出与某种类型连接的节点,并且连接的节点具有某些值。就像是:

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. 这是可以从 Web 控制台完成的,还是之后可以完成的?通过阅读 neo4j 手册,我了解到您想要编写一个自定义 java 实现,该实现逐个节点加载数据并在创建数据库时构建索引。我个人喜欢使用 python,但结果证明 python 绑定太慢,甚至无法导入当前的数据库。

4

1 回答 1

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 控制台完成,如果您想使用信息。

于 2012-06-25T04:12:50.567 回答