2016-05-16 137 views
0

我试图找到在OrientDB 2.2使用gremlin计数(分页),当我的类有很多顶点(100万),这个查询只是死(记录计数startsWith' smi'过滤器大约是6000)。我已经在last_name字段上创建了全文(sbtree)。OrientDB:Gremlin计数查询极其缓慢

g.getVerticesOfClass('person')._().filter{it.getProperty("last_name").startsWith("smi")}.count() 

我该如何写得更好,让计数在合理的时间内恢复。我还没有添加排序,因为它给我的内存。

回答

2

对于某些使用Gremlin .has()步骤而非带有lambda的本机Groovy .filter()方法的东西,您可能会有更多的运气。下面可能会更快:

g.getVerticesOfClass('person')._().has('last_name').startsWith('smi').count() 

如果您使用https://github.com/mpollmeier/orientdb-gremlin,我不认为查询优化器可以使用尚未索引的查询与startsWith()谓词。

+0

谢谢,但我认为在脚本中有错误。已经返回一个管道,并且startsWith之后不能正常工作 –

+0

你是对的,我没有注意,对不起:)。你最好的办法是在这里打开一个问题:https://github.com/mpollmeier/orientdb-gremlin你可能还想编辑你的第一个查询并首先筛选具有'last_name'属性的元素,即。 'g.getVerticesOfClass( '人')._()。具有( “姓氏”)。过滤{it.getProperty( “姓氏”)。startsWith( “SMI”)}。计数()'。您使用的Gremlin步骤越多,优化器可以使用的越多。本机Groovy函数不能。 – jbmusso