- 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个的时候就报错了,报错如下:
请问这个是bug吗还是我使用的方法不对呢?如果是方法不对,请问我应该怎么办?
只有超过9个的时候才报错吗?小于9个的时候正常?
是的,小于等于9个的时候都正常
另外建议先修改下正则表达式:
- J最后那个|会导致ES扫全库
- 用.[A-J].会好一些
不是,是markdown语法解析的问题,我写的都是“.*XXX.*”,这种格式的,就是出现某个关键字。
并不是英文字母,英文字母只是我的示例而已。
感觉像是ES超时的问题。FTIndexUtils.cpp里没有打LOG,所以不是很确定到底是什么问题。如果你是自己编译的binary的话,可以试下在这个文件里加一些LOG,看下到底是不是ES超时。
目前我能给的建议就是:
- 上面已经说了,把正则写对,不要出现match全库的正则(如果有的话)
- 即使不是英文字母也可以改。可以改成.*(XXX|YYY|ZZZ).*这种形式。性能或许会好一些
- 在shell里用http接口访问一下ES,看下是否确实是>=9的时候延迟变大,或者是某个需要匹配的关键词导致延迟变大。
如果不能解决的话可以把详细数据和query发一下,我这边帮你排查。