使用Cypher,多个节点与单个节点有关系,如何查询这些多个节点的匹配以查找匹配的根节点

时间:2017-08-08 21:27:06

标签: neo4j cypher

好的,让我进行设置:我创建了一个Neo4J数据库,其中北美的每个车辆装饰都作为车辆节点(每个车辆节点都有:车辆标签)。现在,我还创建了22个其他标记节点来描述一个特征。例如,我有一个“:MDL”特征节点,一个“:YR”特征节点和一个“:DRIVE”特征节点,以及一个“:DIV”特征节点。每个要素节点都有一个名为“value”的属性。

所以,如果我想找到所有拥有4WD的2016款雪佛兰车型,我的Cypher查询将如下:

MATCH
    (v:Vehicle)--(:DIV{value:"Chevrolet"}),
    (v)--(:DRIVE{value:"4WD"}),
    (v)--(:YR{value:"2016"}),
    (v)--(model:MDL)
return distinct(model.value)

并且,这成功地返回了提供4WD(而不是AWD)的8个雪佛兰车型如下:

"Silverado 3500HD"
"Colorado"
"Silverado 2500HD"
"Silverado 1500"
"Silverado 3500HD Chassis"
"Tahoe"
"Suburban"
"Suburban 3500HD"

我的问题是,正在查看个人资料计划,我不认为这是最有效的方式。因为Cypher基本上是独立制作每个匹配模式,然后合并结果。我试图让Cypher一步到位地完成这一切。有没有人对如何提高效率有任何建议?

1 个答案:

答案 0 :(得分:1)

怎么样?
MATCH (v:Vehicle)--(model:MDL)
WHERE (v)--(:DIV{value:"Chevrolet"})
AND (v)--(:DRIVE{value:"4WD"})
AND (v)--(:YR{value:"2016"})
RETURN DISTINCT (model.value)

不确定是否会更改配置文件,但它似乎更能表达您想要实现的目标。

希望这有帮助!

此致 汤姆