Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 测试短语,看它们是否匹配_Sql - Fatal编程技术网

Sql 测试短语,看它们是否匹配

Sql 测试短语,看它们是否匹配,sql,Sql,我有大量的短语(~几百万),每个少于六七个单词,大多数少于五个,我想看看它们是否“短语匹配”。这是一个搜索引擎营销术语——本质上,如果B中包含a,则短语与B匹配。现在,它们存储在db(postgres)中,我正在正则表达式上执行联接(请参阅)。即使在尝试了所有基本的优化技巧(索引等)并尝试了提供的建议之后,它的运行速度也慢得令人难以置信。 有没有更简单的方法?我并不反对非DB解决方案。有没有任何理由认为正则表达式的杀伤力过大,而且比另一种解决方案花费的时间更长 如果能了解更多的上下文,了解为什么

我有大量的短语(~几百万),每个少于六七个单词,大多数少于五个,我想看看它们是否“短语匹配”。这是一个搜索引擎营销术语——本质上,如果B中包含a,则短语与B匹配。现在,它们存储在db(postgres)中,我正在正则表达式上执行联接(请参阅)。即使在尝试了所有基本的优化技巧(索引等)并尝试了提供的建议之后,它的运行速度也慢得令人难以置信。

有没有更简单的方法?我并不反对非DB解决方案。有没有任何理由认为正则表达式的杀伤力过大,而且比另一种解决方案花费的时间更长

如果能了解更多的上下文,了解为什么需要查看哪些短语是其他短语的子集,那就太好了:例如,不管怎样,DB的构建方式似乎很奇怪:因为DB的格式不合适,所以您现在必须做这项工作,因此,您应该“修复”数据库或它的构建方式是有意义的

这在很大程度上取决于您对数据做了什么以及为什么,但我发现在过去,将内容分解为单个单词和成对单词,然后将资源或短语链接到这些单个/成对单词是很有用的

例如,要实现我已完成的搜索,请执行以下操作:

源文本:测试要查看的短语

Testing phrases to see 参赛作品:

  • 测试
  • 测试短语
  • 词组
  • 短语
若要查看另一个短语是否相似(当然,不包含在其中),您可以用相同的方式分解另一个短语,并计算它们之间常见的短语数量

如果您使用(例如)“see phases to testing”(查看测试的阶段),它还有一个很好的副作用,即仍然匹配,因为单个单词会匹配。。但由于顺序不同,配对不会,因此同时考虑短语(连续词),匹配的数量不会像匹配中的“分数”那样高


正如我所说的那样,这类事情对我很有效,但如果能听到更多的背景/背景,那就太好了,这样我们就可以看看是否能找到更好的解决方案。

当你从MaasSQL之前的答案中找到“清理过的专栏”时,你可以,具体取决于“短语匹配”的工作方式(我不知道),根据包含字符串的长度对此列进行排序

然后确保在过程中以收敛的方式运行比较查询,而不是平面查询,方法是单步遍历表(使用光标),通过WHERE语句和删除已经测试过的候选项(完全删除)来消除用于比较的候选项。您可能需要一个临时表来执行此操作

我之前的“WHERE”语句是什么意思?好的,如果比较值位于按长度排序的列中,您将永远不必测试长字符串是否与短字符串匹配

删除候选字符串:从最短的字符串开始,一旦测试了特定长度的所有字符串,就可以将它们从比较表中删除,因为下一次测试将永远不会得到匹配的字符串

当然,这需要更多的编程,而不仅仅是一条SQL语句。这取决于“短语匹配”的工作方式


DTS或SSI可能也是您的朋友。

进行子字符串匹配的理想算法是

虽然您必须从数据库中读取数据才能使用它,但与更简单的方法相比,它的速度非常快

有关子字符串匹配的相关问题,请参阅:


对于Java中的AhoCorsick实现:

您能更详细地解释一下“A包含在B中”是什么意思吗?你指的是确切的字符串还是单个单词?我刚刚看过你的链接帖子。你在A和B中有多少张唱片?你得到你想要的答案了吗?如果是的话,你能接受吗?如果没有,你能说明你还在寻找什么吗?通常,你提供的信息越多,就越有可能有人能帮助你。