我使用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
表明我想要的节点存在且可以访问。
本手册的哪一部分告诉我如何用脑子弯曲勺子?更重要的是,这究竟意味着什么?!
答案 0 :(得分:2)
如果有任何数字像33那样中断,则意味着限制高达32,为什么32? 2 ^ 5。
大多数限制都是2,MongoDB文档大小不能超过16 MB,在一个集合上可能有最大索引,不超过64等等,这并非易事。
为什么它作为32然后接下来工作,因为直到32它可以在一个操作中实现,而在最后一个操作中它可以看到下一个操作作为另一个操作。但它不能在一次手术中使用33个。
这些限制中的大多数基本上都是健全性检查,而不是真正的技术边界。
至于为什么它几乎总是2的因素,我希望别人回答或换句话说我不知道。
答案 1 :(得分:0)
您是否尝试将登陆和搜索语句拆分为2?
另外,你应该为文字(forormance)添加标签
示例:
MATCH (anchor) WHERE id(anchor) = 3275 WITH anchor MATCH (anchor)-[:LEMMA_TEXT*32]->(word) RETURN word
你得到同样的错误?