获取MySQL表中最相似的行并按相似性对它们进行排序

时间:2013-07-13 16:36:18

标签: mysql search similarity

我有一个数据库表,用于存放用户的车辆(汽车,摩托车)。我想从那张桌子里拿出最相似的车辆。让我们说这个表包含以下列(有一些上下文可以得到这个想法):

table: vehicles


vehicle_id (pk, auto-increment)
model_id (BMW 3er, Honda Accord)
fuel_type (gasoline, diesel)
body_style (sedan, coupe)
year
engine_size (2.0L)
engine_power (150hp)

因此,简而言之,我想选择具有相同make_id(至少)的N(通常为3)行,并根据它们与种子载体共享的相似性对它们进行排序,假设fuel_type匹配,我的等级点数为+3,但如果body_style匹配,则为+1。理想情况下,我会得到N辆车具有最高分,但我的想法是在我不这样做时仍能得到一些东西。

1 个答案:

答案 0 :(得分:2)

正如在我的表中,我目前只有大约5k行并且它们正在慢慢增长,我决定实际使用以下简单的方法(它在我写完问题之后就出现了。)

种子可以说是本田雅阁(model_id 456),2004年,汽油,2.0L,155马力,轿车,自动公司ID 123.

SELECT vehicles.*,  
    (IF(`fuel_type`='gasoline', 3, 0) + 
     IF(`body_style`='sedan', 1, 0) + 
     IF(`year` > 2001 AND `year` < 2007, 2, 0) + 
     IF(`engine_size` >= 1.8 AND `engine_size` <= 2.2, 1, 0) + 
     IF(`engine_power`=155, 3, IF(`engine_power`>124 AND `engine_power`<186, 1, 0))) AS `rank`
FROM vehicles
WHERE vehicle_id!=123 AND model_id=456
ORDER BY `rank` DESC
LIMIT 3

只要我没有太多行,它就会起作用。如果表格变为50-100k,我可能需要切换到Lucene