2013-02-06 132 views
2

我從我的neo4j數據庫中的索引中檢索數據,而且我在執行時遇到了一些問題。我正在嘗試一個查詢,我只是簡單地計算結果值。在我的生產數據庫中,我正在做更復雜的計算。反正,我的查詢看起來像這樣,neo4j緩慢的lucene索引查詢

START person = node:user_index('muncipalityCode:(1278 OR 1285 OR 1283 OR 1293 OR 1284 OR 1261 OR 1282 OR 1262 OR 1281 OR 1280 OR 1273) ') 
return count(person) 

計在大約20秒內返回278418(2.5-3秒第二次,當緩存是溫暖)。當然,我正在返回一個非常大的數據集。然而,這並不是很大。

有什麼地方我可以減少這個瓶頸或我應該看看的一些配置設置?我嘗試在啓動時預熱緩存,但是我無法在生產服務器上將ram中的所有數據都包含進來,因此它會導致事故(我的服務器有16GB RAM)。

我的數據庫具有以下屬性。 10 329 245節點 97 923 564性質 50個697 532關係

+0

您可以將此代碼轉換爲Java API並計時查看它是索引還是計數? – Nicholas

+0

我認爲OR條件可能是一個問題(至少它是在sql中,有時在有很多OR條件時索引是忽略的)。如果將查詢分成不同的START階段,這樣做有幫助嗎? 'START person1 = node:user_index('muncipalityCode:1278),person2 = node:user_index('muncipalityCode:1285),person3 = .... RETURN count(person1)+ count(person2)+ count(person3)... ' – ulkas

+0

有多少人退貨?你可以將zipcode編碼爲索引節點,並將人員連接到這些節點上?然後lucene查詢只需要返回15個條目。 Lucene也保持其結果,所以它也可能與內存使用和GC有關。 –

回答

2

我會使用Luke驗證問題是否在索引或代碼的其他地方。如果相應的Luke查詢很快,那麼問題可能在別處。