0

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

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

没有返回结果

它有什么问题?

4

2 回答 2

0

问题是您在这里有一个空集,因此第二个匹配会将您的整个查询带到一个空集。

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

于 2013-05-14T14:59:45.483 回答
-1

将您的第二个更改MATCHOPTIONAL 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

于 2014-06-28T16:49:17.770 回答