我有PostgreSQL中包含表中的一些汽車百萬記錄:如何在postgresql中創建多列推薦引擎?
+----+--------+------+---------+-----------+-------------+------------+------------+
| id | price | year | mileage | fuel_type | body_type | brand | model |
+----+--------+------+---------+-----------+-------------+------------+------------+
| 1 | 4894 | 2011 | 121842 | "Benzin" | "Sedan" | "Toyota" | "Yaris" |
| 2 | 4989 | 2012 | 33901 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
| 3 | 4990 | 2013 | 55105 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
| 3 | 5290 | 2013 | 20967 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
| 5 | 5594 | 2008 | 121281 | "Benzin" | "Hatchback" | "Mercedes" | "A170" |
| 6 | 4690 | 2012 | 71303 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
| 7 | 5290 | 2013 | 58300 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
| 8 | 5890 | 2013 | 35732 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
| 9 | 5990 | 2013 | 38777 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
| 10 | 6180 | 2013 | 69491 | "Benzin" | "Hatchback" | "VW" | "up!" |
| 11 | 6490 | 2012 | 72900 | "Benzin" | "Sedan" | "Renault" | "Clio III" |
| 12 | 6790 | 2012 | 49541 | "Benzin" | "Hatchback" | "Renault" | "Clio III" |
| 13 | 6790 | 2012 | 46377 | "Benzin" | "Hatchback" | "Renault" | "Clio III" |
| 14 | 6790 | 2012 | 45200 | "Benzin" | "Hatchback" | "Renault" | "Clio III" |
| 15 | 6894 | 2007 | 108840 | "Benzin" | "Sedan" | "VW" | "Golf V" |
| 16 | 6990 | 2009 | 54200 | "Benzin" | "Sedan" | "Renault" | "Mégane" |
| 17 | 6990 | 2012 | 40652 | "Benzin" | "Hatchback" | "Renault" | "Clio III" |
| 18 | 6990 | 2012 | 38080 | "Benzin" | "Sedan" | "Renault" | "Clio III" |
| 19 | 7290 | 2012 | 28600 | "Benzin" | "Hatchback" | "Renault" | "Clio III" |
| 20 | 7290 | 2013 | 52800 | "Benzin" | "Hatchback" | "Renault" | "Twingo" |
+----+--------+------+---------+-----------+-------------+------------+------------+
我想創建一個推薦引擎,可以返回20個最「相似」的基礎上的一些不同的標準,如火柴當用戶搜索:brand = 'Renault' AND price < 60000 AND year > 2010
時,我想在搜索結果之外展示其他一些與其他汽車更加鬆散的結果,即類似的搜索結果,但並不一定完全符合所有搜索條件。
我試圖做的紅寶石一些基於規則的代碼,這不一樣的東西:
- 如果通過了「雷諾Clio」的搜索,我們再'Renault Twingo'是一場勢均力敵的比賽太
- 如果你有8000最高價,然後以通過那些最接近基於此代碼,
- 等等,等等
,我生成一個SQL查詢,其中與order by子句。
但問題是,事情變得非常龐大,因爲我有20個不同的列,我想根據最初的標準選擇考慮。此外,我希望建議是向後兼容的,因爲我不想只做一個簡單的過濾(WHERE
)查詢,在情況下可能最終返回零匹配。相反,我希望它可以做類似於使用文本相似性算法的方法,您可以在其中比較一個短語和所有這些短語,然後根據它們進行排序。
我對我如何實現這一點感到非常困惑,在這種方法中,這不是定義1000條規則,如果/然後生成SQL查詢語句。有沒有其他技術可以使用,或者可能是另一種技術而不是postgresql?
恐怕這是太困難(和不清楚)解決StackOverflow問題。 SQL通常擅長做精確的匹配,但是搜索「喜歡」特定汽車模型的方式遠遠超出了其核心功能。我必須實現(相對)簡單的「近似」名稱匹配,並最終在觸發器中生成特殊用途索引,以便能夠*有些*可預測的查詢結果(和速度)。恐怕你不得不從小處着手併成長。 – Patru