如何查询所有属性 x 为 y 的点

  • 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?
    或者说我这种场景下有没有更好的实现方式?谢谢~~ :grinning:

可以使用match
如:
MATCH (v:player {name: “Yao Ming”}) RETURN v

问题就是我不知道 姚明 是player标签下的

要不你把name 作为vid ,直接用fetch prop on * "name"来查询

较大范围知识图谱下,直接用name作为vid,会导致重名,比如说厨师姚明和篮球运动员姚明变成一个人了,或者直接被覆盖了

我目前能想到的解决方案是:给所有点加一个另外的关系,关系叫 ”实例名称-e“,连到另外的一个点,这个点只有一个 标签,叫”实例名称-v“,该标签下只有一个属性叫 ”name“,里面放上”姚明“,这样虽然可以解决问题,但是在后续维护中引入了额外的复杂性,并且会存在一些数据冗余,且在查询时会更加复杂,轻易不太想这么搞 :joy:

目前nebula 还没有这样的查询方式,@jude-zhu 看看后面要不要考虑加个这样的需求

有消息了麻烦告知下,多谢 :smiley:

错了错了,我是绕进去了,没那么麻烦,给所有的vertex都加一 “internal_tag” 标签,标签里都存放内置属性,查询就都可以在这一个标签里面查就完事了

2 个赞