在数据库上创建Neo4j索引

在数据库上创建Neo4j索引,neo4j,Neo4j,我目前正在试用Neo4j,看看它能做些什么。我的数据库由大约54000个节点和10M个关系(2种关系类型)组成,这些关系是使用从TSV文件导入的。我发现索引需要在合理的时间内获得查询结果 我想要进行的一个典型查询是列出以特定类型连接的节点,并且连接的节点具有特定的值。比如: START a=node(*) MATCH (a)-[r]->(b) WHERE id(a) <> 0 AND id(b) <> 0 AND

我目前正在试用Neo4j,看看它能做些什么。我的数据库由大约54000个节点和10M个关系(2种关系类型)组成,这些关系是使用从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. 
开始
a=节点(*)
匹配
(a) -[r]->(b)
哪里
id(a)0
而id(b)0
和类型(r)=‘关联’
和a.attr1='value'
和b.attr1='value'
返回
a、 b限额200。
当然,这个查询永远不会完成

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

  • 这是可以从web控制台完成的还是以后再做的?通过阅读neo4j手册,我了解到您希望编写一个自定义java实现,在创建数据库时逐节点加载数据并构建索引。我个人希望使用python,但是python绑定的速度太慢,甚至无法导入当前的db


  • 你在寻找一个特定的开始吗

    如果没有,您可以尝试为您的关系编制索引,然后从一开始就将其删除,然后再继续:

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

  • 您可以在关系或节点上创建任何类型的索引,选择要查找的索引。我通常首先看到一个节点,在这里可以根据单独定义的属性通过键/值对进行检索

  • 我没有在Python中这样做,但是您可以在Java中轻松加载,如果您想执行此查询,可以通过Neo4j的Web控制台进行,或者如果您想对信息进行处理,可以通过Java进行


  • (2) 从MySQL的角度来看,gremlin中是否有为现有数据创建索引的选项?在MySQL中,您只需执行CREATEINDEX命令,难道没有类似的方法吗?每次需要包含大量数据的索引时,重新加载整个数据库看起来很麻烦。在neo4j中,您需要自己编制索引,这不是自动为您完成的。谢谢!我通过以下操作稍微修改了批导入源代码,并创建了相关的节点和边缘索引。似乎也可以使用gremlin构建某种索引(但我不知道如何在gremlin中进行适当的过滤,以获得我想要的顶点集,而不是g.getVertices()):indexKeys=new HashSet();添加索引键(“属性1”);index=g.createAutomaticIndex(“nodeIndex”,Vertex.class,indexKeys);automaticindexelper.reIndexElements(g,index,g.getVertices());