我目前正在尝试弄清楚如何计算两条记录之间的相似度。我的第一条记录来自一个停用的广告——所以我想找到例如关于某些 VARCHAR 字段相等性的 10 个最相似的广告。
我想不通的是,如果有任何 MySQL 函数,它可以以任何方式帮助我 - 或者我是否需要以某种奇怪的方式比较字符串?
编辑#1
相似性将由这些字段定义:
标题(权重:50 %)
含量(重量:40%)
类别(重量:10 %)
编辑#2
我希望计算是这样的:
标题:在标题字段中匹配的单词(仅匹配 >2 个字母的单词)。
描述:在标题字段中匹配的单词(仅匹配 >2 个字母的单词)。
类别:匹配类别,如果不匹配,则与权重较小的父类别匹配:)
这个等式可以是:
#1 是旧的、不活跃的帖子,#2 是活跃的帖子:
#2 标题在 #2 的 10 个单词中的 3 个单词与 #1 标题匹配。这给出了 30% 匹配 = 30 分。
#2 描述在 #2 的 400 个单词中匹配 10 个单词中的 #1 描述。这给出了 4% 的匹配 = 4 分。
#2 类别与 #1 的类别不匹配,因此 0 % 匹配。这给了0分。
那么 #2 的总和将是 34 分。:)
编辑#3
这是我的查询 - 但它不会返回不同的行,而是很多相同的行。
SELECT
a.AdvertisementID as A_AdvertisementID,
IF(a.Topic LIKE a2.Topic, 50, 0) + IF(a.Description LIKE a2.Description, 40, 0) + IF(a.Cate_CategoryID LIKE a2.Cate_CategoryID, 10, 0) as A_Score,
a.AdvertisementID as A_AdvertisementID,
a.Topic as A_Topic,
LEFT(a.Description, 300) as A_Description,
a.Price as A_Price,
a.Type as A_Type
FROM
".DB_PREFIX."A_Advertisements a2,
".DB_PREFIX."A_Advertisements a
WHERE
a2.AdvertisementID <> a.AdvertisementID
AND
a.AdvertisementID = :a_id
ORDER BY
A_Score DESC