match语句查询无任何索引的tag报错

V3.6.0

我看3.5是支持match全表扫描

但是执行一个简单的语句却报错:

我这有很多需求类似mysql需要在某个表(tag)上进行搜索过滤分页展示,如果必须添加索引的话,那一个表里可能有几十个字段,那么几十个索引插入会不会写入性能太差了?是不是我得用Mysql或者MongoDB之类的数据库来存一份数据作为数据过滤搜索?这就感觉太难受了

你索引是没有创建么?

你可以仔细看看我说的啥

或者参考`where n.team.name == "a"` still failed when index not existing · Issue #5654 · vesoft-inc/nebula · GitHub

对啊,我问的有问题么?你是不是没有创建索引,没有创建索引的情况下用 v3.5 的全盘扫数据。和你创建了索引去做 match 语句查询不是两种情况么?

我怎么知道是两种情况?我只看文档说的3.5全表扫描支持无索引扫描,有索引可以提高性能,但我提的问题很明显就是无索引为什么会报错,然后我再问是不是必须加索引啊

  1. 如你看到的issue,当前这种方式还是需要建索引的。
  2. 你表里有几十个字段,但我理解不是所有字段多需要用来做这种查询的。你可以把你需要做基于属性来查找点的做下索引即可
1 个赞

我试了用properties(v).name就不需要索引,但看文档说这个方式可能性能稍微差点,然后说我问题里的方法tag.name这种是因为检查的阶段报错,请问这个算bug吗,3.7会不会修复

我和相关的同学确认了下,这个功能开发的时候测试不够全面,所以免索引查询在某些句子中是可以运行的,比如 match v:tag return v 这种语句,但是在某些语句中,比如 match v:tag where v.tag.xx == xxx return v 这种语句是不能运行成功的。

后续的话,我们会安排重新优化下这块。在没有完成优化之前,你可以通过创建相关的索引来进行 tag 的属性值筛选。

1 个赞

嗯嗯,多谢多谢

刚试了下,可以用match (v) where v.player.name == “qwe” return v
这样是不用建索引可以查的

1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。