Neo4j / Cypher - 找到链接到所有给定节点的节点 - 正确的方法?

时间:2014-12-23 09:41:49

标签: neo4j cypher

我想过滤链接到所有给定节点的节点。

我已尝试过此查询,该查询返回具有['passionate', 'eye', 'ear']之一的每个页面:

MATCH (includeWord:Word) WHERE includeWord.Text IN ['passionate', 'eye', 'ear']
MATCH (p:Page)-[:CONTAINS]->(includeWord:Word)
// WHERE p LINKS TO ALL includeWord AT LEAST ONCE ?
RETURN DISTINCT p

此查询也未执行此任务:

MATCH (p:Page)-[:CONTAINS]->(includeWord:Word)
WHERE includeWord.Text = 'passionate'
AND includeWord.Text = 'eye'
AND includeWord.Text = 'ear'
RETURN DISTINCT p

从编程上讲它有点丑陋和不安全,我相信你们中的一些人知道更好的答案。

也许像

MATCH (p:Page)-[:CONTAINS]->(includeWord:Word)
WHERE includeWord.Text IN_ALL ['passionate', 'eye', 'ear']
RETURN DISTINCT p

谢谢!

2 个答案:

答案 0 :(得分:1)

糟糕,

我发现了这个问题neo4j cypher - how to find all nodes that have a relationship to list of nodes

对于我的查询,它完美无缺。

看起来像这样:

MATCH (p:Page)-[:CONTAINS]->(word:Word)
WITH p, collect(word.Text) as words
WHERE ALL (v IN ['passionate', 'eye', 'ear'] WHERE v IN words)
RETURN p

在理解之前需要一点阅读!

答案 1 :(得分:0)

我真的有点惊讶第二个查询有效。我的理解是,密码中的MATCH通过一次考虑一个子图来工作,这意味着任何给定的:Word都不可能有{{1}这同时是Text'passionate'。我希望你需要做类似的事情:

'eye'

显然,这是一个更复杂的查询,但是......