我正在将一些节点存储在Neo4j图形数据库中,每个节点都具有可以本地化为不同语言的属性值。是否有存储多语言属性值的最佳实践?
我正在将一些节点存储在Neo4j图形数据库中,每个节点都具有可以本地化为不同语言的属性值。是否有存储多语言属性值的最佳实践?
有几种建模方式。哪一种最好取决于您的用例和您想要使用的国际化属性的方式。我假设下面草绘了一些示例,假设n
是一个应该在各种语言中翻译其productName
和color
属性的节点。以下将使用类似Cypher的符号。
1)将所有翻译与节点一起存储。
CREATE (n {
productName:'default', color:'default',
productName_en:'engl.prod.name', color_en:'red',
productName_fr:'fr.prod.name', color_fr:'rouge',
})
您可以使用命名规则并使用 <propertyName>_<lang>
作为国际化变量的变体名称。这种方法过于简单,不够优美。
2) 每种语言和实体都有一个子节点,通过关系类型指示语言:
CREATE (n {productName:'default', color:'default'}),
(n)-[:TRANSLATION_EN]->({productName: 'engl.prod.name', color:'red'}),
(n)-[:TRANSLATION_FR]->({productName: 'fr.prod.name', color:'rouge'})
所以你有一个额外的节点和一个额外的关系每种语言。在Neo4j 2.0中,您还可以使用标记指示语言来指示翻译节点。通过这样做,您可以轻松提取语言xyz中的所有文本列表。
3)与2)类似,但使用通用关系类型TRANSLATION
并在其上设置表示语言的属性。
还有一些其他方法,例如理论上也可以使用数组属性。正如所说,没有万能药,它取决于您的用例和要求。