我正在使用MySQL在PHP中构建一个应用程序,用户可以在其中发布文章,他们也可以使用5星系统对这些文章进行评分。我一直在想,当用户执行文本搜索时,我应该将高评分移到顶部,这样就可以轻松找到更好的文章。
我正在使用MySQL FULL TEXT
索引来执行搜索,因此相关性得分来自该搜索。
我想知道如何利用星级来篡改搜索相关性(不会让用户感到沮丧)?
我在做简单乘法时提高了相关性等级次。这将使五星级文章比一星级的相关性高5倍,如下所示:
SELECT *, (MATCH (title, tags, content) AGAINST('search terms')) *
rating AS score
FROM articles WHERE MATCH (title, tags, content) AGAINST('search terms')
ORDER BY score DESC
这是个好主意吗?
我还想过将相关性乘以评级的对数(加1,以避免在评级低于 e 时降低相关性),因此增幅不是很高。如果相关性更高,这也会使评价较差的文章有更好的机会。声明如下:
SELECT *, (MATCH (title, tags, content) AGAINST('search terms')) *
(1 + LN(rating)) AS score
FROM articles WHERE MATCH (title, tags, content) AGAINST('search terms')
ORDER BY score DESC
我应该使用哪种方法?有更好的方法吗?或者忽略用户评分并仅使用术语相关性更好?
(作为一个附带问题,未评级的文章会发生什么?)
答案 0 :(得分:0)
第二个听起来更好。 您一定要考虑用户评分。
未评级的文章会发生什么, 它们将位于列表的最底层,这是你想要的吗?