2013-07-07 62 views
3

Neo4j自版本2.0开始引入labels。从他们自己对该功能的解释中,标签意味着将节点分组为命名集。Neo4j标签和如何加速计数标签节点?

我一直在玩这个选项,它似乎像有没有办法告诉比做其他how many nodes are labelled with Foo

match n:Foo return count(n);

的问题是,在大集,这种操作是很慢的。例如,在我的数据库中,640K节点标有'Foo,查询运行约50秒。

我希望标签默认会在属性上带来一些性能改进,但他们似乎没有这样做。所以我想知道是否有办法加快计算标签集的大小?有一些神奇的东西,也许吧?

还有一个相关的问题:Neo4j中的标签是否有索引,或者它们在默认情况下是否与其他非索引属性类似,就过滤速度而言?

+2

它会在2.0的下一个里程碑更快,目前这仍然是一个完整的扫描,但不会从当前,早期的里程碑得出任何性能结论 –

回答

0

因为我在Neo4j中找不到任何API,所以下面是一种方法。

Neo4j为每种标签类型创建一个独立索引。每个创建的索引是full Lucene index。由于它是Lucene索引,因此可以使用Lucence API打开只读模式的索引并使用its numDocs method

以只读模式打开是非常重要的。

+0

是'以只读模式打开Lucene索引'通过他们的Java API(以及通过Gremlin)可以访问的东西?我知道他们必须在内部有这个数据,不管是Lucene索引还是其他任何东西,问题是我是否可以使用他们的API /插件来使用这些信息。 –