Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
聚合函数MAX与Merge Neo4j Cypher_Neo4j_Cypher - Fatal编程技术网

聚合函数MAX与Merge Neo4j Cypher

聚合函数MAX与Merge Neo4j Cypher,neo4j,cypher,Neo4j,Cypher,我是新来的neo4j,我想寻求帮助。 我有两个名为entity1和entity2的实体,它们的关系已定义(CEO),但是我成功地加载了数据并使用merge形成了关系 置信值|实体1 |实体2 |关系 0.884799964 |杰米·戴蒙|摩根大通|首席执行官 0.884799964 |杰米·戴蒙|摩根大通|首席执行官 0.380894504 |杰米·戴蒙|摩根大通|首席执行官 我的问题:杰米·戴蒙的置信度值分别为0.88和0.38,现在我想展示杰米·戴蒙和摩根大通之间的单一关系,该关系持有最大

我是新来的neo4j,我想寻求帮助。 我有两个名为entity1和entity2的实体,它们的关系已定义(CEO),但是我成功地加载了数据并使用merge形成了关系

置信值|实体1 |实体2 |关系


0.884799964 |杰米·戴蒙|摩根大通|首席执行官

0.884799964 |杰米·戴蒙|摩根大通|首席执行官

0.380894504 |杰米·戴蒙|摩根大通|首席执行官

我的问题:杰米·戴蒙的置信度值分别为0.88和0.38,现在我想展示杰米·戴蒙和摩根大通之间的单一关系,该关系持有最大置信度值(0.88)

通过这个查询,我能够显示置信度值为0.88和0.38的2个关系,而不是3个关系,但是我想要一个具有最大置信度的关系

LOAD CSV WITH HEADERS FROM 'file:/result_is_of_neo4j_final1.csv' AS line
MERGE (e1:Entity1 {name: line.relation_first, e1_confidence: toFloat(line.entities_0_confidence)})
WITH line, e1
MERGE (e2:Entity2 {name : line.relation_second, e2_confidence: toFloat(line.entities_1_confidence)})
WITH e2, e1, line
MERGE (e1)-[r:IS_FROM {relation : line.relation_relation, r_confidence: toFloat(line.relation_confidence)}]->(e2)
RETURN e1,r,e2

您计划以这种方式加载多少数据?如果是大型导入,则可能需要使用定期提交来加速导入并避免内存问题。但是,这样做也会影响导入中的任何类型的比较和条件逻辑,因为不能保证需要比较的行在同一事务中执行

我建议导入所有节点和关系而不使用任何额外的逻辑,然后在加载所有数据后运行查询以删除不必要的关系

加载图形后,此查询应适用于您。对于给定关系的关系中的每一个:IS_,它将只保留具有最高r_置信度的关系,并删除其他关系:

MATCH (e1:Entity1)-[r:IS_FROM]->(e2:Entity2)
WITH e1, r.relation as relation, COLLECT(r) as rels, MAX(r.r_confidence) as maxConfidence, e2
WHERE SIZE(rels) > 1
WITH FILTER(r in rels WHERE r.r_confidence <> maxConfidence) as toDelete
FOREACH (rel in toDelete | DELETE rel)

您计划以这种方式加载多少数据?如果是大型导入,则可能需要使用定期提交来加速导入并避免内存问题。但是,这样做也会影响导入中的任何类型的比较和条件逻辑,因为不能保证需要比较的行在同一事务中执行

我建议导入所有节点和关系而不使用任何额外的逻辑,然后在加载所有数据后运行查询以删除不必要的关系

加载图形后,此查询应适用于您。对于给定关系的关系中的每一个:IS_,它将只保留具有最高r_置信度的关系,并删除其他关系:

MATCH (e1:Entity1)-[r:IS_FROM]->(e2:Entity2)
WITH e1, r.relation as relation, COLLECT(r) as rels, MAX(r.r_confidence) as maxConfidence, e2
WHERE SIZE(rels) > 1
WITH FILTER(r in rels WHERE r.r_confidence <> maxConfidence) as toDelete
FOREACH (rel in toDelete | DELETE rel)

因此,您想要的关系已经存在于图中,无需创建它。是否希望查询只返回每个关系类型的单个最高可信度关系?或者,您想只保留每个关系类型的最高置信度关系,并删除其余置信度较低的关系吗?我想只保留加载时具有最高置信度的关系。我不想在以后质疑这种关系。是否存在任何可能性??因此您想要的关系已经存在于图中,无需创建它。是否希望查询只返回每个关系类型的单个最高可信度关系?或者,您想只保留每个关系类型的最高置信度关系,并删除其余置信度较低的关系吗?我想只保留加载时具有最高置信度的关系。我不想在以后质疑这种关系。有没有可能?感谢您的回复,代码可以正常工作,但它让所有关系都充满信心,即Jamie dimon和JP Morgan有两个conf值为0.88的链接。我想避免这种重复的关系。有什么解决办法吗??请让我知道..请记住,查询区分具有不同关系属性的关系,因此删除后,两个节点之间可能存在多个关系,因为它们各自具有不同的关系属性。然而,为了消除重复的关系(相同的关系,相同的r_置信度),我添加了一个替代查询,应该可以做到这一点。感谢您的响应,代码可以工作,但是它给了所有关系以高置信度,即Jamie dimon和JPMorgan有两个conf值为0.88的链接。我想避免这种重复的关系。有什么解决办法吗??请让我知道..请记住,查询区分具有不同关系属性的关系,因此删除后,两个节点之间可能存在多个关系,因为它们各自具有不同的关系属性。然而,为了消除重复关系(相同的关系,相同的r_置信度),我添加了一个替代查询,应该可以做到这一点。