Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich die ähnlichsten Zeilen in der MySQL-Tabelle und ordnen Sie sie nach Ähnlichkeit

Da ich in meiner Tabelle derzeit nur etwa 5.000 Zeilen habe und sie langsam wachsen, habe ich mich entschieden, den folgenden einfachen Ansatz zu verwenden (er fiel mir ein, kurz nachdem ich die Frage geschrieben hatte).

Der Seed ist beispielsweise Honda Accord (model_id 456), 2004, Benzin, 2,0 l, 155 PS, Limousine mit Auto-Inc-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

Es wird funktionieren, solange ich nicht zu viele Zeilen mache. Wenn die Tabelle 50-100k wird, muss ich wahrscheinlich zu etwas wie Lucene wechseln ?