MYSQL搜索数据库的结果相似

时间:2011-09-29 23:01:07

标签: php mysql

基本上我想做的是搜索一些MYSQL数据库,并返回某个字段超过50%的结果,类似于数据库中的另一个记录。

我想要实现的目标是什么? 我有很多作家将内容添加到我拥有的网站网络中,我需要一个工具来告诉我他们编写的任何页面是否与当前在网络上发布的任何页面过于相似。这可以在post / update上运行,也可以作为cron运行......无论哪种方式都适用于我。

我尝试用php创建一些东西,从数据库中绘制记录并使用函数similar_text(),它给出了两个字符串之间的%差异 - 但这不是一个可行的解决方案,因为你必须比较每个条目其他每一个条目&我用microtime计算完全搜索所有条目需要大约80个小时!

想知道它是否可能!?

谢谢!

3 个答案:

答案 0 :(得分:3)

你可能正在寻找的是SOUNDEX。它是mysql中唯一基于声音的搜索。如果您有大量数据要比较,您可能需要预生成soundex并比较soundex列或像这样使用它:

SELECT * FROM data AS t1 LEFT JOIN data AS t2 ON SOUNDEX(t1.fieldtoanalyse) = SOUNDEX(t2.fieldtoanalyse)

请注意,您也可以使用

t1.fieldtoanalyze SOUNDS LIKE t2.fieldtoanalyze

语法。

最后,您可以将SOUNDEX保存到列中,只需创建一列,然后:

UPDATE data SET fieldsoundex = SOUNDEX(fieldtoanalyze)

然后将实时与预生成值进行比较

有关Soundex的更多信息

Soundex是一个分析单词构成的函数,但却是非常粗略的。它对于“颜色”与“颜色”和“护甲”与“护甲”的比较非常有用,但有时也可以用长字来表示奇怪的结果,因为单词的SOUNDEX是一个字母+一个3数字代码。你可以用这些组合做很多事情。

请注意,mysql中没有levenstein或metaphone实现......还没有,但是levenstein可能是最适合你的情况。

答案 1 :(得分:2)

一切皆有可能。

在不知道类似的标准的情况下,很难提供具体的解决方案。但是,我的建议是预先构建一个相似性表,使用similar_text()之类的函数。在按 term 搜索时,将其用作索引表。

您将初步命中以构建此类索引。但是,您可以在添加新记录时更轻松地管理它。

答案 2 :(得分:0)

感谢您的回答,对于任何寻找类似问题的解决方案的人,我使用SOUNDEX函数来提取具有相似标题的条目,然后将它们与similar_text()函数进行比较。不太完整的数据库比较,但接近我可以得到它!