我正在用mysql在php中构建一个应用程序,用户可以在其中发布文章,还可以用一个五星系统对文章进行评分。我一直在想,当用户执行文本搜索时,我应该将高评价移到顶部一点,这样就很容易找到更好的文章。
我使用mysqlFULL 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
我应该使用哪种方法?有更好的方法吗?还是忽略用户评分而只使用术语相关性更好?
(作为一个附带问题,非评级文章会发生什么情况?)
最佳答案
第二个听起来更好。
你一定要考虑用户评分。
非评级文章会发生什么,
当然,它们会在列表的底部,这是你想要的,对吧?
关于php - 根据星级评分提高搜索的相关性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19060214/