我正在尝试运行一个包含两部分的查询
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
未返回任何结果
它有什么问题?
答案 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