2014-10-03 43 views
1

我得到這個例外,當我嘗試運行長查詢:Neo4j的暗號 - 無法執行查詢[400],「的StackOverflowError」例外

無法執行查詢[400]:\ nHeaders:數組\ n [\ n [Content-Type] => application/json; charset = UTF-8; stream = true \ n [Access-Control-Allow-Origin] => * \ n [Transfer-Encoding] => chunked \ n [Server] => Jetty(9.0.5.v20130815)\ n)\ nBody:Array \ n(\ n [exception] => StackOverflowError \ n [fullname] => java.lang.StackOverflowError \ n [stacktrace] = > Array \ n(\ n [0] => org.neo4j.cypher.internal.compiler.v2_1.bottomUp $ BottomUpRewriter.apply(Rewritable.scala:137)\ n [1] => org.neo4j.cypher.internal .compiler.v2_1.bottomUp $ BottomUpRewriter $$ anonfun $ 1.apply(Rewritable.scala:137)\ n [2] => scala.collectio n.Iterator $$ anon $ 11.next(Iterator.scala:328)\ n [3] => scala.collection.Iterator $ class.foreach(Iterator.scala:727)\ n [4] => scala.collection。 AbstractIterator.foreach(Iterator.scala:1157)\ n [5] => scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:48)\ n [6] => scala.collection .mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:176)\ n [7] => scala.collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:45)\ n [8 ] => scala.collection.TraversableOnce $ class.to(TraversableOnce.scala:273)\ n [9] => scala.collection.AbstractIterator.to(Iterator.scala:1157)\ n [10] => scala.collection .TraversableOnce $ class.toList(TraversableOnce.scala:257)\ n [11] => scala.collection.AbstractIterator.toList(Iterator.scala:1157)\ n [12] => org.neo4j.cypher.internal.compiler .v2_1.bottomUp $ BottomUpRewriter.apply(Rewritable.scala:137)\ n [13] => org.neo4j.cypher.internal.compiler.v2_1.bottomUp $ BottomUpRewriter $$ anonfun $ 1.apply(Rewritable.scala:137) \ n [14] => scala.collection.I terator $$ anon $ 11.next(Iterator.scala:328)\ n [15] => scala.collection.Iterator $ class.foreach(Iterator.scala:727)\ n [16] => scala.collection.AbstractIterator。 foreach(Iterator.scala:1157)\ n [17] => scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:48)\ n [18] => scala.collection.mutable .ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:176)\ n [19] => scala.collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:45)\ n [20] = > scala.collection.TraversableOnce $ class.to(TraversableOnce.scala:273)\ n [21] => scala.collection.AbstractIterator.to(Iterator.scala:1157)\ n [22] => scala.collection.TraversableOnce $ class.toList(TraversableOnce.scala:257)\ n [23] => scala.collection.AbstractIterator.toList(Iterator.scala:1157)\ n [24] => org.neo4j.cypher.internal.compiler.v2_1 .bottomUp $ BottomUpRewriter.apply(Rewritable.scala:137)\ n [25] => org.neo4j.cypher.internal.compiler.v2_1.bottomUp $ BottomUpRewriter $$ anonfun $ 1.apply(Rewritable.scala:137)\ n [26] => scala.collecti on.Iterator $$ anon $ 11.next(Iterator.scala:328)\ n [27] => scala.collection.Iterator $ class.foreach(Iterator.scala:727)\ n [28] => scala.collection。 AbstractIterator.foreach(Iterator.scala:1157)\ n [29] => scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:48)\ n [30] => scala.collection .mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:176)\ n [31] => scala.collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:45)\ n [32 ] => scala.collection.TraversableOnce $ class.to(TraversableOnce.scala:273)\ n [33] => scala.collection.AbstractIterator.to(Iterator.scala:1157)\ n [34] => scala.collection .TraversableOnce $ class.toList(TraversableOnce.scala:257)\ n [35] => scala.collection.AbstractIterator.toList(Iterator.scala:1157)\ n [36] => org.neo4j.cypher.internal.compiler .v2_1.bottomUp $ BottomUpRewriter.apply(Rewritable.scala:137)\ n [37] => org.neo4j.cypher.internal.compiler.v2_1.bottomUp $ BottomUpRewriter $$ anonfun $ 1.apply(Rewritable.scala:137) \ n [38] => scala.coll ection.Iterator $$ anon $ 11.next(Iterator.scala:328)\ n [39] => scala.collection.Iterator $ class.foreach(Iterator.scala:727)\ n [40] => scala.collection。 AbstractIterator.foreach(Iterator.scala:1157)\ n [41] => scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:48)\ n [42] => scala.collection .mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:176)\ n [43] => scala.collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:45)\ n [44 ] => scala.collection.TraversableOnce $ class.to(TraversableOnce.scala:273)\ n [45] => scala.collection.AbstractIterator.to(Iterator.scala:1157)\ n [46] => scala.collection .TraversableOnce $ class.toList(TraversableOnce.scala:257)\ n [47] => scala.collection.AbstractIterator.toList(Iterator.scala:1157)\ n [48] => org.neo4j.cypher.internal.compiler .v2_1.bottomUp $ BottomUpRewriter.apply(Rewritable.scala:137)\ n [49] => org.neo4j.cypher.internal.compiler.v2_1.bottomUp $ BottomUpRewriter $$ anonfun $ 1.apply(Rewritable.scala:137) \ n [50] => scala。collection.Iterator $$ anon $ 11.next(Iterator.scala:328)\ n [51] => scala.collection.Iterator $ class.foreach(Iterator.scala:727)\ n [52] => scala.collection。 AbstractIterator.foreach(Iterator.scala:1157)\ n [53] => scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:48)\ n [54] => scala.collection .mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:176)\ n [55] => scala.collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:45)\ n [56 ] => scala.collection.TraversableOnce $ class.to(TraversableOnce.scala:273)\ n [57] => scala.collection.AbstractIterator.to(Iterator.scala:1157)\ n [58] => scala.collection .TraversableOnce $ class.toList(TraversableOnce.scala:257)\ n [59] => scala.collection.AbstractIterator.toList(Iterator.scala:1157)\ n [60] => org.neo4j.cypher.internal.compiler .v2_1.bottomUp $ BottomUpRewriter.apply(Rewritable.scala:137)\ n [61] => org.neo4j.cypher.internal.compiler.v2_1.bottomUp $ BottomUpRewriter $$ anonfun $ 1.apply(Rewritable.scala:137) \ n [62] => sc ala.collection.Iterator $$ anon $ 11.next(Iterator.scala:328)\ n [63] => scala.collection.Iterator $ class.foreach(Iterator.scala:727)\ n [64] => scala。 collection.AbstractIterator.foreach(Iterator.scala:1157)\ n [65] => scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:48)\ n [66] => scala .collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:176)\ n [67] => scala.collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:45)\ n [68] => scala.collection.TraversableOnce $ class.to(TraversableOnce.scala:273)\ n [69] => scala.collection.AbstractIterator.to(Iterator.scala:1157)\ n [70] => scala .collection.TraversableOnce $ class.toList(TraversableOnce.scala:257)\ n [71] => scala.collection.AbstractIterator.toList(Iterator.scala:1157)\ n [72] => org.neo4j.cypher.internal .compiler.v2_1.bottomUp $ BottomUpRewriter.apply(Rewritable.scala:137)\ n [73] => org.neo4j.cypher.internal.compiler.v2_1.bottomUp $ BottomUpRewriter $$ anonfun $ 1.apply(Rewritable.scala: 137)\ n [74] = > scala.collection.Iterator $$ anon $ 11.next(Iterator.scala:328)\ n [75] => scala.collection.Iterator $ class.foreach(Iterator.scala:727)\ n [76] => scala .collection.AbstractIterator.foreach(Iterator.scala:1157)\ n [77] => scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:48)\ n [78] => $ plus $ plus $ eq(ListBuffer.scala:176)\ n [79] => scala.collection.mutable.ListBuffer。$ plus $ plus $ eq(ListBuffer.scala:45)\ n [80] => scala.collection.TraversableOnce $ class.to(TraversableOnce.scala:273)\ n [81] => scala.collection.AbstractIterator.to(Iterator.scala:1157)\ n [82] => scala.collection.TraversableOnce $ class.toList(TraversableOnce.scala:257)\ n [83] =>財政

查詢:

start k = node:node_auto_index(「title:abc *」)其中k.id in [123,456,...]返回不同的k.prop;

上面哪裏有大約3000個ID的列表。 我正在使用neo4j-community-2.1.2和neo4jphp。有沒有解決這個問題?

+0

您可以更清楚地發佈堆棧跟蹤,並且可以發佈查詢嗎? – JohnMark13 2014-10-03 10:36:35

+0

謝謝,添加了詳細的錯誤日誌。查詢很簡單,但在WHERE子句中有很長的列表。 – 2014-10-03 10:50:22

+0

你可以發佈查詢嗎? – JohnMark13 2014-10-03 10:50:54

回答

1

如果您將JVM設置調整爲數據,則可能會解決溢出問題。 This page特別處理它,但對於使用Neo4j的人來說,整個「配置和性能」設置是至關重要的。

但是考慮到這一點,我會盡量避免這樣的查詢。這種索引被稱爲「遺留」的事實應該是一個警告,並且一般來說,如果有更好的選擇,我覺得最好避免它。從我讀過的所有內容來看,傳統索引不會讓您利用標籤,因此您錯過了Neo4j 2.0+最有用的一個方面。

該星號的出現表明您希望對索引進行全文搜索。傳統索引是本地實現這一目標的唯一方式,但妥協是一個像這樣的大規模查詢。暫時忽略索引,你可以看到如果你不使用傳統索引,你會怎麼做。由於有很多節點都有一些共同點,你可以在它們上面加一個標籤,然後在標籤上進行搜索。這會是因爲這很容易:

MATCH (n:`MyLabel`) WHERE n.name =~ "abc*" return n 

即使在MyLabel:name的指數,正則表達式搜索將跳過它,做它的暗號,但它是如此更容易閱讀,管理,它是現代搜索數據庫的方式。

當我需要全文搜索時,我使用的替代方法是Elasticsearch。它使用lucene索引,與Neo4j相同。我在評論中鏈接的插件https://github.com/sksamuel/elasticsearch-river-neo4j將索引數據庫中給定標籤的屬性。你可以搜索它,它會返回匹配的節點。這樣做的缺點是它是額外的管道,我不知道它有多高效 - 它說它更新數據庫中每個刮片上的所有節點,這看起來不是很好,但這是一個開始,我確信它可以得到改進 - 但是,您可以利用過時的功能或笨拙的查詢來獲取所需的信息。我看到您使用的是PHP,因此您可以編寫腳本,在應用程序級別更高效地處理腳本。

TL; DR:調整您的服務器以修復崩潰;修復你的查詢和你的索引來簡化你的代碼。