首页 > 解决方案 > 根据它们之间的权重找到特定节点的前 n 个节点 - neo4j

问题描述

我正在尝试在 neo4j 中为以下场景编写一个密码查询:

假设有 n 个节点,每个节点与所有其他节点都有关系,并且该关系具有权重(小于 1 且为浮点类型)。例如:有 6 个节点,p1,p2,p3,p4,p5,p6 并且 p1-p3,p2-p3,p1-p2 ... (nCr 关系) 有权重。如果我将参数设为“p2”并要求以降序获取分数的连接节点(如前 3 个节点)。

我暂时想不出任何解决方案。实际节点数为 45,我需要 4 个连接节点到特定节点。

下面的示例:假设以下是我的产品 CSV:

1,Chai
2,Chang
3,Aniseed Syrup
4,Chef Anton's Cajun Seasoning
5,Chef Anton's Gumbo Mix

以及他们关系的片段(不写完整的列表,因为它是 nCr 并且太长了):

1,2,0.0
1,3,0.5364545606371
1,4,0.63314842736745
1,5,0.15688579582258
2,3,0.0
2,4,0.0
2,5,0.0
2,6,0.0

我运行以下查询来创建节点及其关系:

LOAD CSV FROM 'file:///products.csv' AS row
WITH toInteger(row[0]) AS productId, row[1] AS productName
MERGE (p:Product {productId: productId})
  SET p.productName = productName
RETURN count(p)

LOAD CSV FROM 'file:///mapping.csv' AS row
WITH toInteger(row[0]) AS productId1,toInteger(row[1]) as productId2,toFloat(row[2]) as score
MATCH (p1:Product {productId: productId1})
MATCH (p2:Product {productId: productId2})
MERGE (p1)-[rel:SCORE {score:score}]-(p2)
RETURN count(rel)

现在,如果我想查询节点“2”的邻居,权重按降序排列(LIMIT x - 我可以定义限制),我无法为此编写查询。

标签: neo4jcypher

解决方案


您可以将 anORDER BYLIMIT查询结合使用以获得更高的权重。

我不知道您的数据是如何映射的,但您可以按关系权重运行查询排序并将查询限制为 3 个结果。所以你会得到你需要的东西。

我相信本教程可以提供帮助: https ://www.tutorialspoint.com/neo4j/neo4j_limit_clause.htm


推荐阅读