我正在尝试根据用户选择的字词返回内容节点。以下是我的密码查询:
MATCH
(content:content)-[:TAGGED_WITH]-(term:term)
WHERE
term.UUID IN {includedTerms}
AND NOT term.UUID IN {excludedTerms}
RETURN DISTINCT content.whatever
其中{includedTerms}
是要包含的术语的UUID数组。
问题在于它返回连接到任何包含的术语节点的内容,而不是连接到每个包含的术语节点的内容。
我意识到查询正在返回我正在告诉它的内容。问题是如何指定必须使用用户选择的每个(而不是任何)术语节点标记内容?
非常感谢 - 请告诉我是否需要澄清。
答案 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