翻译,我有以下数据模型:与ORDER的Cypher查询BY与后备
- 节点实体
BusinessObject
- 节点实体
Translation
包含language
和text
财产 - 关系
TRANSLATES
从翻译到业务对象,可能有多个
翻译allo我要提供适合用户语言的文本。例如,用户可以阅读德语,业务对象翻译成英语和德语,然后用户界面显示德语。一般来说,用户的语言可以回退到默认语言(英语)。
现在,我想查询所有BusinessObject
s,并通过翻译来排序它们,其中应该包括fallback。这甚至有可能与密码?
编辑:实例
BusinessObject的一个与翻译( “EN”, “某某英语翻译A”)和( “德”, “德意志Übersetzung毛皮”)。
BusinessObject B with Translations(“en”,“一些B的英文翻译”)和(“fr”,“Traductionfrançaispour B”)。
用户U1有语言德语(“de”),后退应该是英语(“en”)。因此,查询业务对象应该导致列表[A,B],因为当按升序排列时,按照字典顺序,翻译“Deutsch ... for A”位于“Some En ... for B”之前。另一方面,当第二个用户具有语言法语时,结果应该是[B,A],因为“Traduc ... pour B”在“XYZ Eng ... for A”之前。第三位英文用户U3应该得到结果[B,A],因为翻译“Some ... for B”在“XYZ ... for A”之前。
所以我真的需要数据库完成的排序,如果可能的话。
编辑:解
与答案的伟大的想法,我想出了以下查询:
MATCH (r:BusinessObject)
WITH r
OPTIONAL MATCH (r)<-[TRANSLATES]-(t:Translation)
WHERE t.language = 'de' // user language
WITH r, t.text as t1
OPTIONAL MATCH (r)<-[TRANSLATES]-(t:Translation)
WHERE t.language = 'en' // fallback
WITH r, coalesce(t1, t.text) as sort
RETURN DISTINCT r ORDER BY sort;
当然,这还没有最好的性能,但没关系我。感谢所有的贡献者!
你可以分享输入到这个,以及期望输出的例子,以及你迄今在查询中做出的任何尝试吗? – InverseFalcon