Indexing 获取Neo4j索引的所有键

Indexing 获取Neo4j索引的所有键,indexing,neo4j,lucene,Indexing,Neo4j,Lucene,我有一个数据库,它的内容是从一个大数据集动态生成的 所有“入口点”节点都在(IndexManager.forNodes(…))上建立索引。因此,我可以查找特定的“入口点”节点 然而,我现在想列举所有这些特定的节点,但我不知道它们在哪个键上被索引 有没有办法枚举Neo4j的所有键 如果不是,那么存储这些键的最佳方式是什么?这些键是一种非常不面向图形的数据类型 更新(感谢您询问详细信息:):该列表将包含200多万条条目。主要用例是在初始化步骤之后永远不会更新它,但其他用例可能需要它,因此它必须具有

我有一个数据库,它的内容是从一个大数据集动态生成的

所有“入口点”节点都在(
IndexManager.forNodes(…)
)上建立索引。因此,我可以查找特定的“入口点”节点

然而,我现在想列举所有这些特定的节点,但我不知道它们在哪个键上被索引

有没有办法枚举Neo4j的所有键

如果不是,那么存储这些键的最佳方式是什么?这些键是一种非常不面向图形的数据类型


更新(感谢您询问详细信息:):该列表将包含200多万条条目。主要用例是在初始化步骤之后永远不会更新它,但其他用例可能需要它,因此它必须具有一定的可伸缩性


此外,我真的更希望避免破坏我当前的恢复能力,因此一次存储所有密钥,而不是以增量方式添加它们,将是最后的解决方案。

这只是一个密钥列表还是每个节点的列表?您可以将这样的列表存储在一个特定的节点上,比如参考节点。

我可以使用不同的数据存储来补充Neo4j——我喜欢Redis——或者尝试@Mattiasperson的建议,并将列表存储在一个节点上。

如果您想获取在特定索引中索引的所有节点,您可以执行以下操作:

IndexHits<Node> hits = IndexManager.forNodes(<INDEX_NAME>).query("*:*");
try{
    while(hits.hasNext()){
        Node n = hits.next();
        ...process the node...
    }
}finally{
    hits.close();
}
IndexHits hits=IndexManager.forNodes().query(“*:*”);
试一试{
while(hits.hasNext()){
节点n=hits.next();
…处理节点。。。
}
}最后{
点击。关闭();
}

不要使用不同的存储,这样会增加复杂性,您可以重试

  • lucene指数。通常lucene能够轻松处理这一问题,尤其是现在MatchAllDocsQuery更好了。但是一个问题是neo4j的家伙使用的是非常旧的lucene版本

  • 每个节点中都有一个特殊的“reference”字段,特别是用于链接到下一个节点的关键遍历情况,在该节点中可以轻松获得所有属性:)


  • 这是一个密钥列表。不过,超过200万把钥匙。考虑到允许节点的类型是原语+字符串,我不知道如何将这样的列表存储在一个节点上……我的意思是,不包括像为每个条目添加索引属性这样肮脏的内容。@MattiSG节点属性可以存储
    String[]
    数组,满足您的需要。关于另一种方法,请参见我的待定答案。@Mattloungo哦,你说得对,我忘记了属性也可以是原始数组:-S但是,你知道将2M数组存储为属性会对性能产生什么影响吗?我不知道存储是如何处理的,但是这样一个字符串数组肯定会从一些压缩中受益,我怀疑它是否会被实现…@MattiSG问得好-我怀疑它是否会很好,但更了解Neo内部结构的人应该有一个想法(Mattias?)。是的,我认为在Neo4j中存储不是很好。这个列表经常更改还是很少更改?如果它只是一个大的静态列表,可能还可以。如果我必须使用一个额外的数据存储,我可能会选择一个愚蠢的文本文件或一些序列化,添加另一个完整的数据库库感觉有些过头了。但是谢谢你的建议,我会试着看看Redis,最近它经常出现。如果它是一个很少变化的列表,我会找一个文本文件,把它加载到内存中,然后在关机或定期或类似的时候写出来:)有一个2M字符串[]不是很好。您是否尝试过将这样的数组存储/加载为String[]属性?它应该很少更改。主要用例应该是……实际上,在init之后永远不会。但我必须支持在没有糟糕表现的情况下添加的可能性。不,我还没试过,我现在不玩了。我会在10天左右试一下。事实上,我就是这么做的。2M太大了,您将从内存中得到
    异常和糟糕的性能(很抱歉投了反对票,但未来的读者必须清楚这不是一个解决方案)@mattloungo我没有时间尝试答案中提供的解决方法。但是从来没有一个“干净”的答案,没有。顺便说一句,这个问题的目的是为了这个项目。只是因为我从这个问题中学到了一些人认为在一个问题中有细节是很好的礼仪。