Graph theory 图Dbs-节点位置-图论
假设您有一组包含所有英文字母的节点,您的任务是仅使用一些常规的“object1”和“object2”节点以及任意多的边来存储单词“foo”和“four” 你会像这样储存关系Graph theory 图Dbs-节点位置-图论,graph-theory,graph-databases,nosql,Graph Theory,Graph Databases,Nosql,假设您有一组包含所有英文字母的节点,您的任务是仅使用一些常规的“object1”和“object2”节点以及任意多的边来存储单词“foo”和“four” 你会像这样储存关系 (object1)--contains-->(f) (object1)--contains-->(o) 及 因此,您可以查询“contains”关系以查找给定单词的字母 那么,如何将双“o”存储在“foo”中呢 以及如何存储每个对象的字母顺序 换句话说,如何存储节点的相对位置(例如:(a)在(b)之前) 如果这
(object1)--contains-->(f)
(object1)--contains-->(o)
及
因此,您可以查询“contains”关系以查找给定单词的字母
那么,如何将双“o”存储在“foo”中呢
以及如何存储每个对象的字母顺序
换句话说,如何存储节点的相对位置(例如:(a)在(b)之前)
如果这些位置必须在2d环境中(例如网格中节点的位置),该怎么办
如何存储多个相似但独特的关系
和往常一样,我觉得我的英语很差,如果有什么不清楚的地方请问 如果您可以为关系分配属性,而不仅仅是类型,您可以 //创建条形图作为关系属性
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)
//创建食物作为关系属性
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支持这一点,尽管上面的伪代码不能立即使用也许最简单的解决方案是使用链表 //创建链接栏作为链接列表
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)
//创建食物作为链接列表
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)
这是图中链表的一个典型示例,假设单词cool,他可以这样存储:
(word:Word {name:"cool"})-[:FIRST]->(c)-[:NEXT]->(o)-[:NEXT]->(o)-[:NEXT]->(l)<-[:LAST]-(word)
(o)下面的,(o)下面的(l)以下,(l)以下,(l)以下,(l)以下,(l)以下,(l)以下,(l)以下,(l)以下,(l)以下,(l)以下,(以下)以下,(以下)以下,(以下)以下,(以下)以下,(以下)以下)以下,(以下)以下)以下,(单词:单词:单词:单词:单词:单词:单词:单词:单词:{{{名字:名字:名字:{{名字:{名字:c(姓名:c})以及,(以下)以下)以下)以下)以下)的,(,(以下)以下)以下)以下)的,(,(,(以下)以下)以下)的,(,(,(以下)以下)以下)以下)以下)以下)的,(,(,(,(,(,(,(以下)以下)以下)以下)以下)以下)以下)以下)以下)以下)以下)以下)学校,(,(,(,(,(,(,(,(,(,(以下)以下)以下)以下)以下)以下)以下)以下)以下)以下)以下)以下)以下)'c'})-[:下一个]->(:字母{name:'o'})-[:NEXT]>(:Letter{name:'l'})-[:NEXT]>(:Letter{name:'d'})你如何在同一个图中表示“酷”、“冷”和“傻瓜”,克里斯托弗?哎呀,克里斯托弗,你意识到你创造了十几个“o”吗-模型中的节点?进一步说:我看不到有共同字母的单词之间有任何联系,我想这对Hrabal是必不可少的。嗯,不,我看不到数千个节点,这可能是console实例的问题。我看不到任何关于关联有共同字母的节点的问题。如果你这样做,你将关联几乎所有的数据库?一个d、 如果您想查找单词中具有例如组合“oo”的单词,您可以运行以下查询:MATCH(o:Letter{name:'o'}),(o2:Letter{name:'o'}),其中o o2 MATCH(w:Word)-[:FIRST | NEXT*]->(o)-[:NEXT]->(o2)返回w.name当然假设:Letter(name)上有索引我想在node.js/neo4j解决方案上工作,Hrabal,你能投票支持下面的一个伪代码解决方案吗,这样我就知道你在寻找什么了?请澄清你的目标:你会用这个gaph回答哪些问题?