1

当我尝试运行长查询时出现此异常:

无法执行查询 [400]:\nHeaders: Array\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] => 数组\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.collection.Iterator$$anon$11。 next(Iterator.scala:328)\n [3] => scala.collection.Iterator$class.foreach(Ite​​rator.scala:727)\n [4] => scala.collection.AbstractIterator.foreach(Ite​​rator.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:27​​3)\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.Iterator$$anon$11.next(Iterator.scala:328)\n [15] => scala.collection.Iterator$class.foreach(Ite​​rator.scala:727)\n [16] => scala.collection.AbstractIterator.foreach(Ite​​rator.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:27​​3)\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.collection.Iterator$$anon$11.next(Iterator.scala:328)\n [27] => scala.collection.Iterator$class.foreach(Ite​​rator.scala:727)\n [28] => scala.collection.AbstractIterator.foreach(Ite​​rator.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:27​​3)\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.collection.Iterator$$anon$11.next(Iterator.scala:328)\n [39 ] => scala.collection.Iterator$class.foreach(Ite​​rator.scala:727)\n [40] => scala.collection.AbstractIterator.foreach(Ite​​rator.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:27​​3)\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(Ite​​rator.scala:727)\n [52] => scala.collection.AbstractIterator.foreach(Ite​​rator.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] => scala.collection.Iterator$$anon$11.next(Iterator.scala:328)\n [63] => scala.collection.Iterator$class.foreach(Ite​​rator.scala:727)\n [ 64] => scala.collection.AbstractIterator.foreach(Ite​​rator.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:27​​3)\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(Ite​​rator.scala:727)\n [76] => scala.collection.AbstractIterator.foreach(Ite​​rator.scala:1157)\n [77] => scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala :48)\n [78] => scala.collection.mutable.ListBuffer.$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:27​​3)\n [81] => scala.collection.AbstractIterator.to(Iterator.scala :1157)\n [82] => scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:257)\n [83] => scal48)\n [78] => scala.collection.mutable.ListBuffer.$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:27​​3)\n [81] => scala.collection.AbstractIterator.to(Iterator.scala: 1157)\n [82] => scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:257)\n [83] => scal48)\n [78] => scala.collection.mutable.ListBuffer.$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:27​​3)\n [81] => scala.collection.AbstractIterator.to(Iterator.scala: 1157)\n [82] => scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:257)\n [83] => scal1157)\n [82] => scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:257)\n [83] => scal1157)\n [82] => scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:257)\n [83] => scal

询问:

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

上面有大约 3000 个 id 的列表。我正在使用 neo4j-community-2.1.2 和 neo4jphp。有什么解决方法吗?

4

1 回答 1

1

如果您根据数据调整 JVM 设置,您可能会解决溢出问题。此页面特别处理它,但整个“配置和性能”设置对于使用 Neo4j 的任何人来说都是至关重要的阅读。

但考虑到这一点,我会尽量避免这样的查询。这种类型的索引被称为“遗留”这一事实应该是一个警告,一般来说,如果有更好的选择,我发现最好完全避免它。就我所阅读的所有内容而言,旧版索引不会让您利用标签,因此您错过了 Neo4j 2.0+ 最有用的方面之一。

该星号的存在表明您希望对索引进行全文搜索。旧版索引是本地实现此目的的唯一方法,但折衷方案是像这样的大规模查询。暂时忽略索引,您可以看到如果您不使用旧索引,您会如何做。由于有很多节点都有共同点,您可以在它们上贴上标签,然后根据标签进行搜索。就这么简单:

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

即使有一个索引MyLabel:name,正则表达式搜索也会跳过它并在 Cypher 中执行它,但它更容易阅读、管理,而且它是搜索数据库的现代方式。

我在需要全文搜索时使用的替代方法是 Elasticsearch。它使用 lucene 索引,与 Neo4j 相同。我在评论中链接的插件https://github.com/sksamuel/elasticsearch-river-neo4j将索引数据库中给定标签的属性。您可以对此进行搜索,它将返回匹配的节点。这样做的缺点是它需要额外的管道,我不确定它的效率如何——它说它会更新数据库每次抓取的所有节点,这看起来不太好,但这是一个开始,我敢肯定它可以改进——但你的好处是不诉诸过时的功能或笨拙的查询来获取你需要的信息。我看到您正在使用 PHP,因此您可以编写一个脚本,在应用程序级别更有效地处理它。

TL;DR:调整您的服务器以修复崩溃;修复您的查询和索引以简化您的代码。

于 2014-10-03T14:50:16.493 回答