Sql 测试短语,看它们是否匹配
我有大量的短语(~几百万),每个少于六七个单词,大多数少于五个,我想看看它们是否“短语匹配”。这是一个搜索引擎营销术语——本质上,如果B中包含a,则短语与B匹配。现在,它们存储在db(postgres)中,我正在正则表达式上执行联接(请参阅)。即使在尝试了所有基本的优化技巧(索引等)并尝试了提供的建议之后,它的运行速度也慢得令人难以置信。Sql 测试短语,看它们是否匹配,sql,Sql,我有大量的短语(~几百万),每个少于六七个单词,大多数少于五个,我想看看它们是否“短语匹配”。这是一个搜索引擎营销术语——本质上,如果B中包含a,则短语与B匹配。现在,它们存储在db(postgres)中,我正在正则表达式上执行联接(请参阅)。即使在尝试了所有基本的优化技巧(索引等)并尝试了提供的建议之后,它的运行速度也慢得令人难以置信。 有没有更简单的方法?我并不反对非DB解决方案。有没有任何理由认为正则表达式的杀伤力过大,而且比另一种解决方案花费的时间更长 如果能了解更多的上下文,了解为什么
有没有更简单的方法?我并不反对非DB解决方案。有没有任何理由认为正则表达式的杀伤力过大,而且比另一种解决方案花费的时间更长 如果能了解更多的上下文,了解为什么需要查看哪些短语是其他短语的子集,那就太好了:例如,不管怎样,DB的构建方式似乎很奇怪:因为DB的格式不合适,所以您现在必须做这项工作,因此,您应该“修复”数据库或它的构建方式是有意义的 这在很大程度上取决于您对数据做了什么以及为什么,但我发现在过去,将内容分解为单个单词和成对单词,然后将资源或短语链接到这些单个/成对单词是很有用的 例如,要实现我已完成的搜索,请执行以下操作: 源文本:测试要查看的短语 Testing phrases to see 参赛作品:
- 测试
- 测试短语
- 词组
- 短语
- 到
- 看
- 看
正如我所说的那样,这类事情对我很有效,但如果能听到更多的背景/背景,那就太好了,这样我们就可以看看是否能找到更好的解决方案。当你从MaasSQL之前的答案中找到“清理过的专栏”时,你可以,具体取决于“短语匹配”的工作方式(我不知道),根据包含字符串的长度对此列进行排序 然后确保在过程中以收敛的方式运行比较查询,而不是平面查询,方法是单步遍历表(使用光标),通过WHERE语句和删除已经测试过的候选项(完全删除)来消除用于比较的候选项。您可能需要一个临时表来执行此操作 我之前的“WHERE”语句是什么意思?好的,如果比较值位于按长度排序的列中,您将永远不必测试长字符串是否与短字符串匹配 删除候选字符串:从最短的字符串开始,一旦测试了特定长度的所有字符串,就可以将它们从比较表中删除,因为下一次测试将永远不会得到匹配的字符串 当然,这需要更多的编程,而不仅仅是一条SQL语句。这取决于“短语匹配”的工作方式
DTS或SSI可能也是您的朋友。进行子字符串匹配的理想算法是 虽然您必须从数据库中读取数据才能使用它,但与更简单的方法相比,它的速度非常快 有关子字符串匹配的相关问题,请参阅:
对于Java中的AhoCorsick实现:您能更详细地解释一下“A包含在B中”是什么意思吗?你指的是确切的字符串还是单个单词?我刚刚看过你的链接帖子。你在A和B中有多少张唱片?你得到你想要的答案了吗?如果是的话,你能接受吗?如果没有,你能说明你还在寻找什么吗?通常,你提供的信息越多,就越有可能有人能帮助你。