2017-08-08 103 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的模型時,它解決了問題。 –

相關問題