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
Neo4j Cypher查询和节点参数,而不是关系值_Neo4j_Cypher_Spring Data Neo4j_Neo4j Ogm - Fatal编程技术网

Neo4j Cypher查询和节点参数,而不是关系值

Neo4j Cypher查询和节点参数,而不是关系值,neo4j,cypher,spring-data-neo4j,neo4j-ogm,Neo4j,Cypher,Spring Data Neo4j,Neo4j Ogm,在我的Neo4j、SDN4项目中,我有以下实体: 决策,标准,投票 每项决定都可以根据不同的标准进行表决 现在,我使用下面的Cypher查询按所选标准的平均投票权重对决策进行排序({criteriaIds}参数表示标准的集): 现在我对这个查询的性能不满意,所以我希望在查询执行期间减少数据基数 为了做到这一点,我计划将该值存储为决策和标准之间的关系属性,而不是将每个avgVotesWeight存储为决策节点本身的属性 例如,我有以下节点: Decision1(uid = 1) Criterio

在我的Neo4j、SDN4项目中,我有以下实体:

决策
标准
投票

每项决定都可以根据不同的标准进行表决

现在,我使用下面的Cypher查询按所选标准的平均投票权重对决策进行排序(
{criteriaIds}
参数表示
标准的
):

现在我对这个查询的性能不满意,所以我希望在查询执行期间减少数据基数

为了做到这一点,我计划将该值存储为
决策
标准
之间的关系属性,而不是将每个
avgVotesWeight
存储为
决策
节点本身的属性

例如,我有以下节点:

Decision1(uid = 1)

Criterion1(uid = 1)
Criterion2(uid = 2)
Criterion3(uid = 3)
Decision1
在标准上有以下
avgVotesWeight

Decision1 for Criterion1 = 4.3
Decision2 for Criterion1 = 2.1
Decision3 for Criterion1 = 1.8
因此,我将在
Decision1
节点上创建以下属性:

Decision1(CAVW1=4.3, CAVW2=2.1, CAVW3=1.8)
其中,
CAVW
是一个普通的
字符串
前缀,用于将这些属性与我的SDN4中的其他
决策
属性区分开来,一个
1
2
3
后缀是
标准
uid
(我将这些
uid
传递到
中的密码查询中){criteriaIds}
参数)

因此,我的问题是-一般来说这是一个好主意吗?如果是,请您帮助我重写上面提到的查询,以便使用这些属性,而不是以下旧的密码查询:

WHERE id(c) IN {criteriaIds} 
WITH c, childD, (vg.avgVotesWeight * (CASE WHEN c IS NOT NULL THEN coalesce({criteriaCoefficients}[toString(id(c))], 1.0) ELSE 1.0 END)) as weight, vg.totalVotes as totalVotes 

另外,我现在不知道在哪里保存
vg.totalvots
值,这些值当前也存储在
Decision
criteria
之间的相同关系中。请提供建议。也许它也应该以我想要为
avgVotesWeight
实现的相同方法存储?例如,我可以介绍添加
Decision
属性,如
TV1=34
。这是一个好主意吗?

对于可能对类似解决方案感兴趣的人,这是我的新工作查询:

MATCH (parentD)-[:CONTAINS]->(childD:Decision) 
WHERE id(parentD) = {decisionId} 
UNWIND {criteriaIds} AS cid 
WITH childD, (properties(childD)['CAVW' + cid] * (CASE WHEN cid IS NOT NULL THEN coalesce({criteriaCoefficients}[toString(cid)], 1.0) ELSE 1.0 END)) AS weight, properties(childD)['CTV' + cid] AS totalVotes  
WITH * MATCH (childD)-[ru:CREATED_BY]->(u:User)  
RETURN ru, u, childD AS decision, toFloat(sum(weight)) as weight, toInt(sum(totalVotes)) as totalVotes 
ORDER BY  weight 
DESC SKIP 0 LIMIT 2

对于可能对类似解决方案感兴趣的人,这是我的新工作查询:

MATCH (parentD)-[:CONTAINS]->(childD:Decision) 
WHERE id(parentD) = {decisionId} 
UNWIND {criteriaIds} AS cid 
WITH childD, (properties(childD)['CAVW' + cid] * (CASE WHEN cid IS NOT NULL THEN coalesce({criteriaCoefficients}[toString(cid)], 1.0) ELSE 1.0 END)) AS weight, properties(childD)['CTV' + cid] AS totalVotes  
WITH * MATCH (childD)-[ru:CREATED_BY]->(u:User)  
RETURN ru, u, childD AS decision, toFloat(sum(weight)) as weight, toInt(sum(totalVotes)) as totalVotes 
ORDER BY  weight 
DESC SKIP 0 LIMIT 2