使用neo4j查找图表中的可能路径

时间:2016-02-08 11:23:04

标签: graph neo4j

免责声明:我是图形数据建模的初学者,我们将不胜感激任何帮助,提示或指导。原谅我缺乏知识。

一万个专长的想法是能够语言从一个语言翻译成另一个质量等级

我有以下域名模型:

  • 活动(又名activity
  • 源语言(又名。language_from
  • 目的语言(又名。language_to
  • 质量等级(又名。level

我已对下图进行建模,以允许用户要求从质量级别为Z的X到Y的转换。

enter image description here

现在让我们说用户想要从en-us翻译成de-de。两个节点之间没有链接,因为由于域名原因,业务不允许此路径。

然而,可以通过en-us - > fr-fr然后fr-fr - > de-de来实现此类翻译。

我的问题是:

  1. 上述图表模型是否适合此类查询?
  2. 使用neo4j cyphers查询会是什么样的?
  3. 任何让我走上正确轨道的提示都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我认为您可以更直接的方式为数据建模。

您可以使用Language个与TRANSLATE关系直接连接的level个节点作为关系的属性。它更简单,直接映射到您的域问题,您不需要其他节点进行查询。

(Language {name: 'de-de'})-[:TRANSLATE {level: 7}]->(Language {name: 'fr-fr'})

可变长度查询通过多种语言查找翻译:

MATCH path=(lang:Languag {name: 'de-de'})-[:TRANSLATE*1..3]-(other_lang:Language {name: 'en-us'})
RETURN nodes(path)

在这里你也可以过滤某个级别:

MATCH path=(lang:Languag {name: 'de-de'})-[:TRANSLATE*1..3]-(other_lang:Language {name: 'en-us'})
WHERE all(x IN relationships(path) WHERE x.level > 5)
RETURN nodes(path)