Neo4j:结果是重复的
所以我试图找到每个至少有一个公共节点和另一个节点的节点。这是我用于执行此操作的请求:Neo4j:结果是重复的,neo4j,graph-databases,bolt,Neo4j,Graph Databases,Bolt,所以我试图找到每个至少有一个公共节点和另一个节点的节点。这是我用于执行此操作的请求: 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
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\u url,target.unique\u url]
总是重复的,就像一个节点与另一个节点有一个共同的邻居一样,我总是得到这样的结果:
[url1, url2]
[url2, url1]
[url1, url2]
[url2, url1]
我检查了,数据在数据库中没有复制,所以请求复制了它们,有人知道这可能是什么原因吗?
非常感谢 尝试这样更改查询的开头
匹配(来源:文章)-->(邻居id(目标)
具有
我想你需要给出一个输入数据的例子来验证你的查询。@stdob——我怎么能轻松做到这一点呢?就像数据库的导出或纯文本示例一样,由于你的匹配模式是对称的,你将得到每个匹配对至少2行,只需将位置切换为
源
和目标
节点id的质量应该可以解决这个问题(其中id(源)
替换第二行),您的返回不是对称的。您返回的是目标\u id
,而不是源的id,这有什么原因吗?@InverseFalcon不太可能,我可以返回任何我想要的,id更多的是为了调试。我试着按照您所说的替换第二行,现在我有了:[url1,url2][url1,url2]
哪一个更好,但仍然不完美您可能需要再次检查数据库中是否没有重复的节点具有相同的unique\u url
属性。尝试在:Article(unique\u url)上创建唯一约束
并查看它是否正确完成。否则,属性不是唯一的,您可能需要进行一些清理。
MATCH (source:Article)-->(neighbor<)--(target:Article)
WHERE id(source) > id(target)
WITH ...