为什么Neo4J告诉我没有勺子?

46

我正在使用Neo4J来表示文本;在最简单的情况下,文本是由关系LEMMA_TEXT连接的一系列单词。

我正在尝试使用类似以下查询的方式找到已知单词后的第N个单词。

MATCH (anchor)-[:LEMMA_TEXT*32]->(word) 
WHERE id(anchor) = 3275 
RETURN word

在一个特定的案例中,如果我将路径长度增加到33,我会遇到这个错误:

Neo.DatabaseError.Statement.ExecutionFailure: There is no spoon.

然而以下查询返回了正确的结果。

MATCH (anchor)-[:LEMMA_TEXT*32]->(word)-[:LEMMA_TEXT]->(next) 
WHERE id(anchor) = 3275 
RETURN next

这证明了我想要的节点存在且可访问。

哪里有介绍如何用意念弯曲勺子的手册章节?更重要的是,这实际上是什么意思?!


你能否与我们分享你的数据库以供测试? - Michael Hunger
35
重复?http://scifi.stackexchange.com/questions/28175/why-does-neo-say-there-is-no-spoon尼奥为什么说“没有勺子”? - Martin Preusse
1
请参阅 https://dzone.com/articles/neo4j-18m03-related-coffee。 - John Hascall
1
@MartinPreusse 我在这里哭泣 :''') 谢谢 :D! - bigkahunaburger
2
不要试图弯曲勺子,而是认识到真相。什么是真相?没有勺子。说“没有勺子”的不是尼奥,尼奥说的是真相。说“没有勺子”的是那个光头男孩。 - Ian
显示剩余5条评论
2个回答

2
如果数字达到33就出现问题,这意味着在32之前有一个限制,为什么是32?因为2的5次方。
大多数限制都是2的因数,并不是简单的技术边界。例如,MongoDB文档大小不能超过16 MB,在集合上最多可以有64个索引等。
为什么它的工作方式是先达到32,然后再进行下一个操作?因为在32之前可以通过一次操作实现,而对于最后一个则可以将其视为另一个操作。但是无法在一次操作中处理33。
这些限制大多数只是为了确保正常运行,而不是真正的技术边界。
至于为什么几乎总是2的因数,我希望其他人能回答或者换句话说,我不知道。

0
你尝试将着陆和搜索语句分成两个部分了吗?
此外,你应该为文本单词添加标签(forormance)。
例如:
MATCH(anchor) WHERE id(anchor)= 3275 WITH anchor MATCH(anchor)- [:LEMMA_TEXT * 32] - >(word) 返回单词
你还是得到相同的错误吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接