3

我正在使用 MySQL 构建一个 PHP 应用程序,用户可以在其中发布文章,他们也可以使用 5 星系统对文章进行评分。我一直在想,当用户执行文本搜索时,我应该将评分高的文章移到顶部,以便更容易找到更好的文章。

我正在使用 MySQLFULL TEXT索引来执行搜索,因此相关性分数来自该搜索。

我想知道如何使用星级来篡改搜索相关性(而不会让用户感到沮丧)?

我虽然在做简单的乘法以提高相关性评级时间。这将使 5 星文章的相关性比 1 星文章高 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

我应该使用哪种方法?有没有更好的方法?还是忽略用户评分而只使用术语相关性更好?

(作为一个附带问题,未评级的文章会发生什么?)

4

1 回答 1

0

第二个更好听。您绝对应该考虑用户评分。

未评级的文章会发生什么,它们当然会在列表的底部,这就是你想要的对吗?

于 2013-11-05T23:29:28.400 回答