全文索引正则查询报错

  • nebula 版本:2.6.1
    lookup on procedure_tag where REGEXP(procedure_tag.entity_name, ‘.A.|.B.|.C.|.D.|.E.|.F.|.G.|.H.|.I*|.J.|’, 10000) yield distinct procedure_tag.entity_name as entity_name, procedure_tag.entity_tag
    我的查询是这样的,查询procedure_tag 这个类型下包含上述关键字中任意一个的结果,但是当这个正则中关键字的数量超过9个的时候就报错了,报错如下:
    image
    请问这个是bug吗还是我使用的方法不对呢?如果是方法不对,请问我应该怎么办?

只有超过9个的时候才报错吗?小于9个的时候正常?

是的,小于等于9个的时候都正常

另外建议先修改下正则表达式:

  1. J最后那个|会导致ES扫全库
  2. 用.[A-J].会好一些

不是,是markdown语法解析的问题,我写的都是“.*XXX.*”,这种格式的,就是出现某个关键字。
并不是英文字母,英文字母只是我的示例而已。

感觉像是ES超时的问题。FTIndexUtils.cpp里没有打LOG,所以不是很确定到底是什么问题。如果你是自己编译的binary的话,可以试下在这个文件里加一些LOG,看下到底是不是ES超时。

目前我能给的建议就是:

  1. 上面已经说了,把正则写对,不要出现match全库的正则(如果有的话)
  2. 即使不是英文字母也可以改。可以改成.*(XXX|YYY|ZZZ).*这种形式。性能或许会好一些
  3. 在shell里用http接口访问一下ES,看下是否确实是>=9的时候延迟变大,或者是某个需要匹配的关键词导致延迟变大。

如果不能解决的话可以把详细数据和query发一下,我这边帮你排查。