neo4j - Neo4j Cypher 手动关系索引、APOC 触发器和数据复制
问题描述
我有以下使用普通关系操作进行节点过滤的查询:
MATCH (dg:DecisionGroup)-[:CONTAINS]->(childD:Decision)
WHERE dg.id = 1
MATCH (childD)-[relationshipValueRel2:HAS_VALUE_ON]->(filterCharacteristic2:Characteristic)
WHERE filterCharacteristic2.id = 2
WITH relationshipValueRel2, childD, dg
WHERE (ANY (id IN [".NET"] WHERE id IN relationshipValueRel2.value ))
RETURN childD.name
它只返回一个节点(正如预期的那样):
"Candidate1"
配置文件输出:
我想优化查询性能,这就是为什么我使用以下触发器将关系添加到手动索引中:
CALL apoc.trigger.add('HAS_VALUE_ON_ASSIGNED_RELATIONSHIP_PROPERTIES_TRIGGER', "UNWIND keys({assignedRelationshipProperties}) AS key
UNWIND {assignedRelationshipProperties}[key] AS map
WITH map
WHERE type(map.relationship) = 'HAS_VALUE_ON'
CALL apoc.index.addRelationship(map.relationship, keys(map.relationship)) RETURN true",
{phase:'before'})
以及以下查询,以获取与第一个相同的数据,但仅从手动索引中获取:
MATCH (dg:DecisionGroup)-[:CONTAINS]->(childD:Decision)
WHERE dg.id = 1
MATCH (childD)-[relationshipValueRel2:HAS_VALUE_ON]->(filterCharacteristic2:Characteristic)
WHERE filterCharacteristic2.id = 2
WITH relationshipValueRel2, filterCharacteristic2, childD, dg
CALL apoc.index.in(filterCharacteristic2,'HAS_VALUE_ON','(value:(".NET"))')
YIELD node WITH node AS childD
RETURN childD.name
但问题是,此查询返回同一节点的两个实例:
"Candidate1"
"Candidate1"
配置文件输出:
我做错了什么以及为什么此查询返回 2 个实例而不是单个实例?
解决方案
推荐阅读
- python - 使用自定义 og:tags 生成自定义链接以在linkedin帖子上共享
- keras - Keras 在构建之后调用之前访问父层的 output_shape
- javascript - 如何使用 JavaScript 在屏幕上移动两辆车
- mysql - 如何将一个mysql查询的结果传递给另一个mysql查询?
- flutter - 在颤动的底部导航栏中使用提供程序调用页面
- python - python模拟给定理论概率的实际发生次数
- python - 如何让 tkinter 在继续之前等待一行代码完成?
- javascript - PDF.JS - 如何在服务器上存储 PDF
- javascript - React 仅显示 Firestore 上收集的一条数据
- git - git-diff 控制台默认颜色含义