【发布时间】:2018-11-18 02:49:33
【问题描述】:
有没有办法在对字符串执行REGEX_TEST() 以检索 ArangoDB 中的文档时进行索引?
如果有任何优化的方法请告诉我
【问题讨论】:
有没有办法在对字符串执行REGEX_TEST() 以检索 ArangoDB 中的文档时进行索引?
如果有任何优化的方法请告诉我
【问题讨论】:
REGEX_TEST() AQL 函数没有可用的索引加速功能,将来不太可能出现。不是因为用户和开发人员没有兴趣,而是因为实际上不可能构建任何类型的索引数据结构来加快正则表达式的评估。
ArangoDB 支持的正则表达式允许许多不同类型的表达式,但是因为它们可以有很大差异,所以几乎没有机会拥有合适的索引。对于相等比较,有哈希索引,这可能是最快的索引。对于范围查询,有跳跃列表索引,当然还有很多计算机科学中已知的索引类型,但我不知道有一种可以加速任意正则表达式。
如果您的表达式允许,也许有机会在REGEX_TEST() 之前添加一个可能使用索引的过滤条件?这将主要限于区分大小写的前缀匹配,例如FILTER REGEX_TEST(doc.str, "a[a-z]*") 可以扩展到 FILTER doc.str >= "a" AND doc.str < "b" AND REGEX_TEST(doc.str, "a[a-z]*") 并允许使用跳过列表索引仅评估 str 以 a 开头的文档上的正则表达式。或者像[fm]oo|bar 这样的简单正则表达式可以重写为一组相等比较:FILTER doc.str IN ["foo","moo","bar"]。也看看ArangoSearch。
【讨论】: