【发布时间】:2018-10-11 19:22:03
【问题描述】:
所以我试图找到每个节点至少与另一个节点有一个公共节点。这是我用来执行此操作的请求:
MATCH (source:Article)--(neighbor)--(target:Article)
WHERE NOT (source.unique_url) = (target.unique_url)
WITH DISTINCT [source.unique_url, target.unique_url] AS combo,
source, target, neighbor
RETURN combo,
source.unique_url AS source_unique_url,
source.title AS source_title,
source.url AS source_url,
target.unique_url AS target_unique_url, target._id AS target_id,
target.title AS target_title,
count(neighbor) AS common_neighbors
ORDER BY common_neighbors DESCENDING
但遗憾的是,[source.unique_url, target.unique_url] 总是重复的,就像一个节点与另一个节点有共同的邻居,我总是得到这样的结果:
[url1, url2]
[url2, url1]
[url1, url2]
[url2, url1]
我检查了数据库中的数据没有重复,所以请求正在复制它们,有人知道可能是什么原因造成的吗? 非常感谢!
【问题讨论】:
-
我认为您需要提供一个输入数据示例,以验证您的查询。
-
@stdob-- 我怎样才能轻松做到这一点?就像数据库的导出或纯文本示例
-
由于您的 MATCH 模式是对称的,因此每个匹配对将至少获得 2 行,只需将位置切换为
source和target。虽然节点 id 上的不等式应该解决这个问题(WHERE id(source) < id(target)替换您的第二行),但您的回报不是对称的。你有什么理由返回target_id而不是源的ID? -
@InverseFalcon 不是真的,我可以返回我想要的任何东西,id 更多的是用于调试目的。我试着按照你说的替换第二行,现在我有了:
[url1, url2] [url1, url2]更好,但仍然不完美 -
您可能需要仔细检查您的数据库中是否存在具有相同
unique_url属性的重复节点。尝试在:Article(unique_url)上创建一个唯一约束,看看它是否完成且没有错误。如果不是,则该属性不是唯一的,您可能需要进行一些清理工作。
标签: neo4j graph-databases bolt