neo4j cypher:使用WITH关键字的多个查询

时间:2013-05-08 12:20:01

标签: neo4j cypher graph-databases

我正在尝试运行一个包含两部分的查询

start cat=node(21) match cat-[:HAS_KEYWORD]->(word)-[:FOUND_IN]->doc return doc

此查询正常工作并返回结果

start cat=node(21) match cat-[:HAS_KEYWORD]->composit-[:COMPOSITE_OF]->(word)-[:FOUND_IN]-single

这也行,并重新调整空集

但是当我把它们结合起来时

start cat=node(21) match cat-[:HAS_KEYWORD]->(word)-[:FOUND_IN]->doc
with cat,doc                                                        
 match cat-[:HAS_KEYWORD]->composit-[:COMPOSITE_OF]->xx-[:FOUND_IN]->single    
 return doc,single

未返回任何结果

它有什么问题?

2 个答案:

答案 0 :(得分:0)

问题是你在这里有一个空集,所以第二个匹配将你的整个查询带到一个空集。

也许您正在寻找UNION功能?这实际上是在2.0中出现的。

答案 1 :(得分:0)

将您的第二个MATCH更改为OPTIONAL MATCH,所以:

START cat=node(21)
MATCH (cat)-[:HAS_KEYWORD]->(word)-[:FOUND_IN]->(doc)
OPTIONAL MATCH (cat)-[:HAS_KEYWORD]->(composit)-[:COMPOSITE_OF]->(xx)-[:FOUND_IN]->(single)
RETURN doc,single

您的OPTIONAL MATCH子句针对MATCH子句中找到的所有内容执行,但在没有找到结果的情况下不会减少记录集。

http://docs.neo4j.org/chunked/stable/query-optional-match.html