根据节点之间的权重查找特定节点的前n个节点-neo4j

根据节点之间的权重查找特定节点的前n个节点-neo4j,neo4j,cypher,Neo4j,Cypher,我尝试在neo4j中为以下场景编写一个密码查询: 假设有n个节点,每个节点与所有其他节点都有一个关系,并且该关系有一个权重(小于1且为as-type float)。 例如:有6个节点,p1、p2、p3、p4、p5、p6,p1-p3、p2-p3、p1-p2有权重。。。(nCr关系)。如果我给出一个参数“p2”,并要求按降序获取得分的连接节点(如前3个节点) 我现在想不出任何解决办法。节点的实际数量是45,我需要4个连接到特定节点的节点 示例如下: 假设以下是我的产品CSV: 1,Chai 2,Ch

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

假设有n个节点,每个节点与所有其他节点都有一个关系,并且该关系有一个权重(小于1且为as-type float)。 例如:有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,太长了):

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

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”的邻居(限制x-我可以定义限制),我无法为此编写查询。

您可以将
order BY
LIMIT
查询相结合,以获得更高的权重

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

我相信本教程可以帮助:

您有没有尝试过的示例?嘿,谢谢,我刚刚编辑了查询并添加了示例,这有帮助吗?
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)