मैं युक्त PostgreSQL में एक टेबल कुछ कारों 1,000,000 रिकॉर्ड: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
, मैं खोज परिणाम के बाहर कुछ अन्य, अन्य कारों के साथ अधिक ढीले परिणाम प्रस्तुत करना चाहता हूं, जो समान है, लेकिन सभी खोज मानदंडों को सटीक रूप से मेल नहीं खाता है।
मैं रूबी में कुछ नियम आधारित कोड बनाने की कोशिश की है, ऐसा ही कुछ करता है:
- आप एक 'रेनॉल्ट क्लियो' के आधार पर खोज अगर हम तो'Renault Twingo' एक करीबी मैच भी
- तो है आप अधिकतम कि
- आदि आदि
इस कोड के आधार पर करने के लिए उन निकटतम से तो आदेश 8000 की कीमत है, मैं के साथ एक SQL क्वेरी उत्पन्न जहां और खंड द्वारा आदेश।
हालांकि समस्या यह है कि चीजें बहुत बड़ी हैं, क्योंकि मेरे पास 20 अलग-अलग कॉलम हैं जिन्हें मैं वैकल्पिक रूप से विचार करना चाहता हूं, प्रारंभिक मानदंडों पर आधार। इसके अलावा, मैं इस अर्थ में पिछड़ा संगत होने की सिफारिश चाहता हूं कि मैं केवल एक साधारण फ़िल्टरिंग (WHERE
) क्वेरी नहीं करना चाहता, कि मामले में शून्य मिलान लौट सकते हैं। इसके बजाय मैं चाहता हूं कि जब आप पाठ समानता एल्गोरिदम का उपयोग करते हैं, तो आप ऐसा कुछ भी करते हैं, जहां आप एक वाक्यांश की तुलना कर सकते हैं और उन सभी के लिए तुलना स्कोर प्राप्त कर सकते हैं जिन्हें आप क्रमबद्ध कर सकते हैं।
मैं इस बारे में बहुत परेशान हूं कि मैं इसे कैसे कार्यान्वित कर सकता हूं, एक दृष्टिकोण में यह 1000 नियमों को परिभाषित नहीं कर रहा है और यदि/तो SQL क्वेरी उत्पन्न करने के लिए कथन। क्या कोई अन्य तकनीक है जिसका उपयोग मैं कर सकता हूं, या शायद पोस्टग्रेस्क्ल की तुलना में एक और तकनीक?
मुझे डर है कि यह एक स्टैक ओवरफ्लो प्रश्न में हल करने के लिए बहुत मुश्किल (और अस्पष्ट) है। एसक्यूएल सटीक मिलान करने में आम तौर पर अच्छा होता है, लेकिन एक विशिष्ट कार मॉडल की तरह "कुछ" खोजना इसकी मूल क्षमताओं से परे है। मुझे एक (अपेक्षाकृत) सरल "अनुमानित" नाम मिलान लागू करना पड़ा और मैंने कुछ हद तक * अनुमानित क्वेरी परिणाम (और गति) प्राप्त करने में सक्षम होने के लिए एक ट्रिगर में एक विशेष उद्देश्य सूचकांक तैयार करना समाप्त कर दिया। मुझे डर है कि आपको छोटे से शुरू करना होगा और वहां से बढ़ना होगा। – Patru