![ae1a4c86830414cc69bd765a8d201c89.png](https://img-blog.csdnimg.cn/img_convert/ae1a4c86830414cc69bd765a8d201c89.png)
在读到 ES官方文档-WildcardQuery、ES官方文档-RegExpQuery 、ES官方文档-PrefixQuery 的时候,
觉得挺有意思,三类具有包含关系的查询竟然出了3套接口,RegExp(正则表达式)包含 Wildcard(通配符)包含Prefix(前缀)。
查了一下原理,果不其然都是通过将Pattern构造成DFA来加速字符串匹配速度的。
(其实TermRangeQuery(字符串范围查询)也是通过自动机做的,但不够典型,不加入讨论)
1.适用场景
看文档即可。
2.原理
DFA是编译原理必学的内容,重新回顾一下。实现拿ES的正则查询举例。
2.1.概念梳理
![36f6dc0c80b9b62da5df576ef61ea8f4.png](https://img-blog.csdnimg.cn/img_convert/36f6dc0c80b9b62da5df576ef61ea8f4.png)
2.2.写正规式
网上有大量资料,自查即可。
(ab)*(a*|b*)(ba)*
2.3.将正规式构造成NFA
代码坐标&