2017-08-08 305 views
1

好吧,让我来设置一下:我创建了一个Neo4J数据库,作为车辆节点(每个车辆节点具有:车辆标签)。现在,我还创建了22个其他标签节点来描述一个功能。例如,我有一个“:MDL”特征节点,一个“:YR”特征节点,以及一个“:DRIVE”特征节点和一个“:DIV”特征节点。每个特征节点都有一个名为“value”的属性。使用Cypher,多个节点与单个节点有关系,如何查询这些多个节点的匹配以找到匹配的根节点

所以,如果我想找到具有四轮驱动的2016雪佛兰车型,我的Cypher查询将如下:

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

而且,这种成功返回的8个雪佛兰车型,提供4WD(相对于AWD)如下:

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

我的问题,是在看个人资料的计划,我不认为这是最有效的方式。因为基本上Cypher正在独立制作每个匹配模式,然后合并结果。我正试图让Cypher一步到位。有没有人有任何关于如何使这种效率更高的推荐?

回答

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) 

不知道会更改配置文件一大堆,但它似乎更好地表达你所要完成的是什么。

希望这会有所帮助!

Regards, Tom

+0

谢谢,帮助很多。没有我的方法那么快,但是当我想要具有4WD或AWD的模型时,它解决了问题。 –

相关问题