使用函数后查询速度很慢并且在复合索引查询中无效

提问参考模版:

  • nebula 版本:2.0.1
  • 部署方式(分布式 / 单机 / Docker / DBaaS):分布式
  • 是否为线上版本:N
  • 硬件信息
    • 磁盘 ssd
    • CPU、内存信息 16核 内存520G
  • 问题的具体描述
  • 相关的 meta / storage / graph info 日志信息

数据量在1.8W
1.不使用函数查询
match(v:tag1) where v.name==‘3760’ return v
image
使用函数
match(v:tag1) where toUpper(v.name)==‘3760’ return v
image

2.我在tag中创建t1,t2,t3的复合函数,
使用==查询,t1、t2;t1、t3任意组合都可以,只要满足左匹配;
如果使用函数,比如substr(t1,0,2)==‘01’ and t2==‘小明’,提示索引不存在

这个是什么原因,函数没有代入索引这块?

这是因为当函数的时候,这个filter没有推到storage那里,所以是把tag1的数据捞到graphd再做filter。
但是直接用属性比较的时候,是推到storaged,所以只会拿到符合条件的filter的数据,数据量就少了很多了。所以时间就少了。

函数好像只能放在条件最后使用,不代入索引,后面有没有考虑支持函数上面可以支持索引,还有如果需要从字符串第一个开始返回,该怎么处理,文档最小从第2个开始


image

这个我记录下需求

还有如果需要从字符串第一个开始返回,该怎么处理

你这里的第一个返回是什么意思,比如字符串 “abcd” , 你希望返回 “a” 还是 “b” 开始的字符,索引0表示的就是第一个字符。文档已经写的很清楚了。但是你的结果很奇怪,出来的怎么不是长度为3的字符串。你执行下 yield substr("abcd", 0, 3) 截下图

文档最小从第2个开始

哪里看到这个说法了?截图


substr函数说明,是有BUG还是不支持从0开始截取字符串

支持呀,substr(string a, int pos, int count) 和 substr(string a, int pos) 都是可以的,后者pos为0的时候,就是取整个字符串,前者pos 为0,就是从第一个开始截 count 长度的字符串


我测试pos为0,count不管为几都是全部字符串,条件里面用substr也一样,是不是个BUG

是 bug 呀,所以我上面让你执行下 yield substr("abcd", 0, 3) 结果截图。

你确定你用的是2.0.1的版本吗?这个版本已经修复的了

怎么看版本信息?用的PRM安装的


是不是这个

你这是2.0.0版本,不是2.0.1版本

版本升级修复的BUG在哪里可以看?