2015-01-08 31 views
0

假設你有一組包含所有英文字母的節點,而你的任務是使用一些通用的「object1」和「object2」來存儲單詞「foo」和「four」 「節點,只要你想盡可能多的邊緣..圖DBS - 節點的位置 - 圖論

(object1)--contains-->(f) 
(object1)--contains-->(o) 

(object2)--contains-->(f) 
(object2)--contains-->(o) 
(object2)--contains-->(u) 
(object2)--contains-->(r) 

這樣你就可以查詢

你將存儲在關係‘包含’關係找到字母的給定單詞。

但如何在「foo」中存儲雙「o」?

如何存儲每個對象的字母順序?

換句話說,如何存儲節點的相對位置(例如:(a)之前(b))?

如果這些位置必須處於二維環境(例如:網格中節點的位置),該怎麼辦?

如何存儲多個相似但唯一的關係? P:一如既往,我覺得我的英語很差,如果有什麼不清楚的地方,請問!

+0

我覺得自己像一個的node.js/Neo4j的sollution工作,Hrabal,你可以upvote下面的僞代碼解決方案之一,所以我知道你在找什麼? –

+0

請澄清你的目標:你會用這個問題來回答哪些問題? –

回答

1

如果你能不僅僅是類型分配屬性的關係,另一方面,你可能

//創建作爲巴關係屬性

create (bar) 
    create (bar)-[:contains{order:0]->(b) 
    create (bar)-[:contains{order:1]->(a) 
    create (bar)-[:contains{order:2]->(r) 

//創建食物關係屬性

create (food) 
    create (food)-[:contains{order:0]->(f) 
    create (food)-[:contains{order:1]->(o) 
    create (food)-[:contains{order:2]->(o) 
    create (food)-[:contains{order:3]->(d) 

這是由Neo4j支持,認爲上面的僞代碼不是立即可用的

0

也許最巧妙的解決方法是使用鏈表

//創建作爲酒吧鏈表

create (ar)-[:start]->(a) 
    create (ar)-[:proceed]->(r) 
    create (bar)-[:start]->(b) 
    create (bar)-[:proceed]->(ar) 

//創建食物鏈表

create (od)-[:start]->(o) 
    create (od)-[:proceed]->(d) 
    create (ood)-[:start]->(o) 
    create (ood)-[:proceed]->(od) 
    create (food)-[:start]->(f) 
    create (food)-[:proceed]->(ood) 
1

這是一個圖中鏈接列表的典型例子,假設字,他可以像這樣存儲:

(word:Word {name:"cool"})-[:FIRST]->(c)-[:NEXT]->(o)-[:NEXT]->(o)-[:NEXT]->(l)<-[:LAST]-(word) 

這種表述可以幫助您有關於類似字母的見解:

  • 在哪個位置的字母o是最放置

  • 所有具有OOL字母組合

  • 獲取所有以「all」開頭的單詞

這裏用圖形表示http://console.neo4j.org/r/uzwded

插入查詢一個Neo4j的控制檯,在控制檯出現問題時:

MERGE (cool:Word {name:'cool'}) 
MERGE (fool:Word {name:'fool'}) 
MERGE (cold:Word {name:'cold'}) 
CREATE (cool)-[:FIRST]->(:Letter {name:'c'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'l'})<-[:LAST]-(cool) 
CREATE (fool)-[:FIRST]->(:Letter {name:'f'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'l'})<-[:LAST]-(fool) 
CREATE (cold)-[:FIRST]->(:Letter {name:'c'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'l'})-[:NEXT]->(:Letter {name:'d'})<-[:LAST]-(cold) 
+0

Christophe在同一張圖中,你會如何呈現「酷」,「冷」和「傻瓜」? –

+0

就像這樣:http://console.neo4j.org/r/uzwded –

+0

糟糕,Christophe,你是否意識到你在你的模型中創建了大約十個「o」節點?更進一步:我認爲在有共同字母的單詞之間沒有關係,我認爲這對Hrabal來說是必不可少的。 –