我有大量短语(〜几百万),每个短语少于六七个单词,大多数少于五个,我想看看他们是否"短语匹配".这是一个搜索引擎营销术语 - 基本上,如果A包含在B中,则短语匹配B.现在,它们存储在db(postgres)中,我正在执行regexes的连接(请参阅此问题).即使在尝试了所有基本的优化技巧(索引等)并尝试提供的建议之后,它仍然运行缓慢.
有更简单的方法吗?我不反对非数据库解决方案.有没有理由认为正则表达式是矫枉过正的,并且比不同的解决方案占用时间更长?
进行子字符串匹配的理想算法是AhoCorsick。
尽管您必须从数据库中读取数据才能使用它,但与更简单的方法相比,它的速度非常快。
有关子字符串匹配的相关问题,请参阅此处:
这里是Java 中的 AhoCorsick 实现: