2016-05-16 95 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