- nebula 版本:v2-beta
- 部署方式:Docker
- 问题的具体描述:
情景:
tag定义:默认能代表该实体的值的属性为 name 并创建索引
问答机器人收到提问:姚明的父亲是谁
语义分析出来 :姚明 -父亲-> ?
想转成这样的nGql查询:lookup on * where *.name==“姚明”
事实上只能:lookup on player where player.name==“姚明” union lookup on team where team.name==“姚明”
这种情况下,如果标签比较多的话ngql就会很长,不现实
在neo4j中,可以通过装sparql进行查询,
请问在nebula中有没有优化的方法呢?是否能支持上面的那个ngql?
或者说我这种场景下有没有更好的实现方式?谢谢~~
可以使用match
如:
MATCH (v:player {name: “Yao Ming”}) RETURN v
问题就是我不知道 姚明 是player标签下的
要不你把name 作为vid ,直接用fetch prop on * "name"来查询
较大范围知识图谱下,直接用name作为vid,会导致重名,比如说厨师姚明和篮球运动员姚明变成一个人了,或者直接被覆盖了
我目前能想到的解决方案是:给所有点加一个另外的关系,关系叫 ”实例名称-e“,连到另外的一个点,这个点只有一个 标签,叫”实例名称-v“,该标签下只有一个属性叫 ”name“,里面放上”姚明“,这样虽然可以解决问题,但是在后续维护中引入了额外的复杂性,并且会存在一些数据冗余,且在查询时会更加复杂,轻易不太想这么搞
有消息了麻烦告知下,多谢
错了错了,我是绕进去了,没那么麻烦,给所有的vertex都加一 “internal_tag” 标签,标签里都存放内置属性,查询就都可以在这一个标签里面查就完事了
2 个赞