返回连接到所有指定节点(而不是任何指定节点)的内容(Cypher / Neo4j)

时间:2014-02-21 02:41:00

标签: neo4j cypher

我正在尝试根据用户选择的字词返回内容节点。以下是我的密码查询:

    MATCH 
        (content:content)-[:TAGGED_WITH]-(term:term)
    WHERE
        term.UUID IN {includedTerms}
        AND NOT term.UUID IN {excludedTerms}
    RETURN DISTINCT content.whatever

其中{includedTerms}是要包含的术语的UUID数组。

问题在于它返回连接到任何包含的术语节点的内容,而不是连接到每个包含的术语节点的内容。

我意识到查询正在返回我正在告诉它的内容。问题是如何指定必须使用用户选择的每个(而不是任何)术语节点标记内容?

非常感谢 - 请告诉我是否需要澄清。

2 个答案:

答案 0 :(得分:1)

我无法理解NOT term.UUID IN {excludedTerms}的用法,但您可以根据需要编辑以下查询。

以下查询将仅使用term个节点,这些节点将具有所需UUIDs集的includedTerms个属性。

MATCH (term:term) 
WHERE term.UUID IN [includedTerms] 
WITH collect(term) AS ms 
MATCH (content:content)-[r:TAGGED_WITH]->(x) 
WHERE x IN ms 
WITH content, count(r) AS rs,ms 
WITH collect(content) AS ns, collect(rs) AS rss, length(ms) AS mss 
RETURN [t IN range(0,length(ns)-1) 
  WHERE rss[t]=mss | ns[t]] AS result

答案 1 :(得分:1)

也许使用WITH可以提供帮助:

MATCH 
    (content:content)-[:TAGGED_WITH]-(term:term)
WHERE
    term.UUID IN {includedTerms}
    AND NOT term.UUID IN {excludedTerms}
WITH content, count(*) as connectedTerms
WHERE connectedTerms = {_included_terms_size_}
RETURN DISTINCT content.whatever