图数据库 - 如何处理多语言数据

时间:2015-08-23 01:14:02

标签: graph neo4j graph-databases

我试图接近多语种图表数据库,但我在如何实现最佳模型方面苦苦挣扎。

我目前的提议是制作两种节点类型:MovieMovieTranslation

Movie将所有关系视为likesrelatedratingscommentsMovieTranslation包含所有可翻译数据(titleplotgenres)。 Movie节点不包含这些属性,仅包含original_title

MovieMovieTranslationtranslation关系捆绑在一起。

当我查询节点时,我会检查它们是否与查询的区域设置有translation的关系(例如en_US)。如果为true,则将转换与主节点合并作为结果。

我认为这种方式可能并不是最好的,但我无法想出更好的方法。

你们对数据库模型有更好的建议吗?非常感谢。

我使用neo4j,如果你需要这些信息。

谢谢, 维尼。

2 个答案:

答案 0 :(得分:2)

我建议将原始标题也移动到自己的节点,称之为MovieTitle。 "并发"以这种方式你的模型实际应该"简化" (或至少标准化)您的查询,因为您总是在一个地方寻找电影片头(也用于索引和搜索)。

您假设电影只有一个原始标题,但并非如此。韩日联合制作将至少有两个原创作品。日本电影的整个类型在电影院和VHS上发布了不同的日本原创电影。

与原始标题的概念不同的是特定语言标题的概念。在不同的中文国家发行的同一部电影将有不同的中文标题,被认为更适合当地特定受众。

获取原始标题:
MATCH (c:Country)<-[HAS_NATIONALITY]-(m:Movie)-[HAS_TITLE]->(t:MovieTitle)-[HAS_NATIONALITY]->(c:Country) WHERE m.id = 1 RETURN COLLECT(t.title, c.country_code)

获得中国原创作品:
MATCH (m:Movie)-[HAS_TITLE]->(t:MovieTitle)-[HAS_NATIONALITY]->(c:Country) WHERE c.country_code == "CN" RETURN m, COLLECT(t.title, c.country_code)

获取所有语言标题:
MATCH (m:Movie)-[HAS_TITLE]->(t:MovieTitle)-[HAS_NATIONALITY]->(c:Country)-[HAS_LANGUAGE]->(l:Language) RETURN m, COLLECT(t.title, l.language_code)

获取所有中文标题:
MATCH (m:Movie)-[HAS_TITLE]->(t:MovieTitle)-[HAS_NATIONALITY]->(c:Country)-[HAS_LANGUAGE]->(l:Language) WHERE l.language_code == "zh" RETURN m, COLLECT(t.title, c.name)

我会将情节和流派分成他们自己的节点。有一种观点认为,不同的国家电影院有独特的流派,但如果西部片和武士剧都是时代戏剧的子类型,那么你想在时期戏剧搜索中找到它们。

我仍然会想到翻译节点,但不要与他们混淆你正在建模的域名。它应该是领域无知的 - 对于简单的单词/短语,如&#34;浪漫喜剧&#34; - 几乎应该是GraphAware在2025年发布的第三方图形插件。

获取特定影片的法语类型标题:
MATCH (m:Movie)-[HAS_GENRE*]->(g:Genre)-[HAS_TRANSLATION]->(t:Translation)-[HAS_LANGUAGE]->(l:Language) WHERE m.id = 100 AND l.language_code = "fr" RETURN COLLECT(t.translation)

获取所有罗马喜剧:
MATCH (m:Movie)-[HAS_GENRE*]->(g:Genre)-[HAS_TRANSLATION]->(t:Translation) WHERE t.translation = "comédie romantique" RETURN m

与电影片名和流派不同,情节完全更简单,因为您将电影的故事建模为一团文字而不是域本身。也许以后你可以对情节文本进行文本分析,找到主题,性别偏见等,并在图中对此进行建模。

获取特定电影的法语语言图:
MATCH (m:Movie)-[HAS_PLOT]->(p:Plot)-[HAS_LANGUAGE]->(l:Language)-[HAS_TRANSLATION]->(t:Translation) WHERE m.id = 100 AND t.translation = "French" RETURN p.plot

(请将Cypher查询视为伪代码。我没有制作图表并对其进行测试。)

答案 1 :(得分:1)

我认为模型还可以。

您可以RETURN movie, translationRETURN {movie:movie, translation:translation}

目前尚不支持将节点转换为地图并合并这些地图,这是路线图上的内容。

您希望如何以及在何处使用节点?如果要进行渲染,您只需访问两列或条目即可。如果对于图形可视化,您还可以将它们组合到json源中的节点中。