match语法问题




为什么用name去match查不出来,用vid可以,我建了tag index,关联的name属性

很离谱。求解

流程上,你先补充下 Nebula 的版本号,以及你创建 index 之后,rebuild index 过吗

好像这是一个BUG.对于一个节点有多个 TAG 并且 多个 TAG中有同名属性时,好像会有这样的问题.只查询匹配第一个 TAG 的属性.你的company 没有做为第一个 .就被略过了.

v2.0,重建过索引

目前数据一个节点只会对应一个tag,但是有两个tag有个共同的属性name。我试试换属性名

刚刚发现一个新的问题:graph版本2.0,用nebula-java 的GraphClientExample 换了schema跑,
报错

[2021-08-13T10:39:36.773+0800][INFO ][main][com.vesoft.nebula.client.graph.net.NebulaPool][|||][]Get connection to 100.69.149.58:9669
[2021-08-13T10:39:41.842+0800][ERROR][main][com.cmft.NebulaUpdateDemo][|||][]Execute: `INSERT VERTEX company(name, code) VALUES 'CMFT':('CMFT', 103), 'CMHK':('CMHK', 102), 'CMG':('CMG', 101); INSERT VERTEX partner(name) VALUES  'p1':('p1'), 'p2':('p2'), 'p3':('p3'), 'p4':('p4'), 'p5':('p5'), 'p6':('p6'); ', failed: SemanticError: No schema found for `company'

部分代码

{
                String createSchema = "CREATE SPACE IF NOT EXISTS test(vid_type = FIXED_STRING(64)); "
                        + "USE test; "
                        + "CREATE TAG IF NOT EXISTS company(cname string, code int); "
                        + "CREATE TAG IF NOT EXISTS partner(pname string); "
                        + "CREATE EDGE IF NOT EXISTS has_partner(percent string); ";
                ResultSet resp = session.execute(createSchema);
                if (!resp.isSucceeded()) {
                    log.error(String.format("Execute: `%s', failed: %s",
                            createSchema, resp.getErrorMessage()));
                    System.exit(1);
                }
            }
            TimeUnit.SECONDS.sleep(5);

            {
                String insertVertexes = "INSERT VERTEX company(name, code) VALUES "
                        + "'CMFT':('CMFT', 103), "
                        + "'CMHK':('CMHK', 102), "
                        + "'CMG':('CMG', 101); "
                        + "INSERT VERTEX partner(name) VALUES  "
                        + "'p1':('p1'), "
                        + "'p2':('p2'), "
                        + "'p3':('p3'), "
                        + "'p4':('p4'), "
                        + "'p5':('p5'), "
                        + "'p6':('p6'); ";
                ResultSet resp = session.execute(insertVertexes);
                if (!resp.isSucceeded()) {
                    log.error(String.format("Execute: `%s', failed: %s",
                            insertVertexes, resp.getErrorMessage()));
                    System.exit(1);
                }
            }

啥情况求解!

你创建的属性名是 cname 啊,插入的是 name,是 2 个不一样的属性呀

换了其中一个属性名,结论怎么样.

[2021-08-13T10:55:18.774+0800][INFO ][main][com.vesoft.nebula.client.graph.net.NebulaPool][|||][]Get connection to 100.69.149.58:9669
[2021-08-13T10:55:23.855+0800][ERROR][main][com.cmft.NebulaUpdateDemo][|||][]Execute: `INSERT VERTEX company(cname, code) VALUES 'CMFT':('CMFT', 103), 'CMHK':('CMHK', 102), 'CMG':('CMG', 101); INSERT VERTEX partner(pname) VALUES 'p1':('p1'), 'p2':('p2'), 'p3':('p3'), 'p4':('p4'), 'p5':('p5'), 'p6':('p6'); ', failed: SemanticError: No schema found for `company'

改了还是不行哦

数据还没用代码插进去呢,待会儿试了告诉你

实不相瞒,我代码没改,又run了一遍,成功了。。。无厘头

[2021-08-13T11:00:02.104+0800][INFO ][main][com.vesoft.nebula.client.graph.net.NebulaPool][|||][]Get connection to 100.69.149.58:9669
        Company |        Partner |        Percent |
           CMFT |             p1 |            12% |
           CMFT |             p2 |            23% |

Process finished with exit code 0

- -。我的理解是可能有点生效时间

换了不同的属性名,两种match都能找到,你试试

大佬们,还有个问题,如果我有个场景是要删除某个节点的某一个类型的边,这个节点有不少于2种类型的边,怎么操作呀?我看delete edge只可以删除初始节点和目标节点之间的边,要么就是把这个节点的所有边删除。。。

@rank,了解下.重复的边,可以通过rank值来区分的.

意思是成功了?

是的

我知道rank的作用,但我现在需要把某个节点的某个类型边删除,我并不知道dst是啥,这好像没有语句可以实现

那估计要先查询了.知道了dst后,再来拼ngql.用管道或者别的子查询.

我能想到的也是先查dst的vid,再去delete :joy: