PHP的加权搜索算法 问题
表[1]中有5个项目,每个项目有4个属性:红色、绿色、蓝色和黄色。 每个属性都可以得到1到9分[2] 在“我的网站”上执行搜索时,用户可以通过给每个属性一个介于1到9之间的分数来指定每个属性与搜索结果的相关性 我应该使用什么算法根据用户偏好计算和排序结果 资源 [1] -创建表项id INT NOT NULL AUTO_INCREMENT,name VARCHAR128,红色INT,绿色INT,蓝色INT,黄色INT,主键idPHP的加权搜索算法 问题,php,mysql,algorithm,search,weighted,Php,Mysql,Algorithm,Search,Weighted,表[1]中有5个项目,每个项目有4个属性:红色、绿色、蓝色和黄色。 每个属性都可以得到1到9分[2] 在“我的网站”上执行搜索时,用户可以通过给每个属性一个介于1到9之间的分数来指定每个属性与搜索结果的相关性 我应该使用什么算法根据用户偏好计算和排序结果 资源 [1] -创建表项id INT NOT NULL AUTO_INCREMENT,name VARCHAR128,红色INT,绿色INT,蓝色INT,黄色INT,主键id [2] -在项目名称中插入红色、绿色、蓝色、黄色值“随机1”、4、1
[2] -在项目名称中插入红色、绿色、蓝色、黄色值“随机1”、4、1、9、4、“随机2”、1、1、2、9、“随机3”、5、7、6、3、“随机4”、2、2、8、1 将搜索标点计算为一个字段,并按它对查询进行排序
SELECT *, (red * @rw) AS w1, (green * @gw) AS w2, (blue* @bw) AS w3, (yellow * @yw) AS w4, (w1 + w2 + w3 + w4) AS result
FROM items ORDER BY result DESC;
@rw=>红色重量,@bw=>蓝色重量,等等。把它加起来就行了
<?php
require('connect.php') //your db connection data
$redWeight=$_REQUEST['howeverYouPassedTheRedWeighting'];
$blueWeight=$_REQUEST['howeverYouPassedTheBlueWeighting'];
$yellowWeight=$_REQUEST['howeverYouPassedTheYelloWeighting'];
$greenWeight=$_REQUEST['howeverYouPassedTheGreenWeighting'];
$query="SELECT name, ( red*$redWeight+green*$greenWeight+blue*$blueWeight+yellow*$yellowWeight ) AS value FROM items ORDER BY value DESC";
$res=mysql_query($query);
//etc.
?>
我不确定我是否理解了你的意思,但是这个怎么样:
$user_defined_relevance = array ('red' => 1, 'blue' => 3, 'green' => 2, 'yellow' => 7);
arsort($user_defined_relevance); //this sorts the array by value descending while maintaining index association
$query = 'SELECT * FROM items ORDER BY '.implode(array_keys($user_defined_relevance), ', DESC');
//will make SELECT * FROM items ORDER BY yellow DESC, blue DESC, green DESC, red DESC;
mysql_query($query);
...
对不起,我没有直接的答案。这是一个非常有趣的话题。您可以使用与欧几里德距离或皮尔逊相关性相关的东西。你可以在有关集体智慧的书籍中找到更多 当然,实现这样的事情会更加困难,但是你的结果会更加准确和精确。我推荐这些书:
我刚刚尝试过这个,但它实际上不起作用-在“字段列表”中的未知列“w1”去掉括号,并在phpit works中替换@rx变量作为它的真实值,在mysql客户端中尝试这个:选择5*4作为mult;