在Neo4j cypher查询中使用表达式限制

时间:2015-02-26 12:38:31

标签: neo4j cypher

我的密码查询是

start item= node:jobSearch ("title:Job*") WITH collect(item) as items limit 10  RETURN items as job union start item2= node:jobSearch ("title:Job*") WITH collect(item2) as item2s , count(item2) as paths  match (job1:Job)-[relation]-(relationNode)  where 
(relationNode.name IN ['java','Dance','Programming'] OR relation.duration IN 
['java','Dance','Programming']) AND  NOT (job1 IN item2s) AND paths < 10   RETURN  job1  as job limit 8

我在上面的查询中使用了限制8,我想使用10 - 路径。 我怎么用这个?

1 个答案:

答案 0 :(得分:4)

所以看起来你应该能够使用limit子句中的表达式,或者可能通过计算上一个WITH语句中的正确整数(例如WITH (10-paths) as resultCount (...) limit resultCount),但我对此进行了测试,但它没有成功。

只是为了踢,我查看neo4j源代码,看看我是否遗漏了什么。 In this source file你可以看到一些关于cypher语言本身的子句和解析的规则。

坏消息是LIMIT表达式需要无符号整数文字或参数。所以基本上你不能做你要求做的事情,除非你在单独的查询中计算(10-paths),然后在{resultCount}参数中加入LIMIT 10参数,然后给它预先计算的值。这可能是很多工作,没有多大价值。

从好的方面来说,除非你的结果非常庞大,否则最简单的只是paths并且在结果集中包含整数{{1}},以便使用这些结果的代码我知道要忽略更多的结果。