2010-09-30 14 views
9

में इसी तरह की पंक्तियां खोजें I डेटाबेस एंट्री खोजने के लिए मेरे ऐप को डिज़ाइन करने का प्रयास करें जो समान हैं।डेटाबेस

आइए उदाहरण के लिए तालिका ले कार (सब कुछ एक तालिका में उदाहरण सरल रखने के लिए):

"समान कारें के लिए खोज:

CarID | Car Name | Brand | Year | Top Speed | Performance | Displacement | Price 
1   Z3   BMW  1990 250   5.4   123   23456 
2   3er   BMW  2000 256   5.4   123   23000 
3   Mustang  Ford 2000 190   9.8   120   23000 

अब मैं उस तरह के प्रश्नों क्या करना चाहते हैं जेड 3 (सभी ब्रांडों) करने के लिए "(उपेक्षा" कार का नाम ")

इस संदर्भ में इसी प्रकार के मतलब है कि पंक्ति जहां ज्यादातर कॉलम बिल्कुल एक जैसे हैं सबसे समान है।

इस उदाहरण में यह "3er बीएमडब्ल्यू" के बाद से 2 कॉलम होगा (प्रदर्शन और विस्थापन ही कर रहे हैं)

तुम मुझे संकेत डेटाबेस प्रश्नों डिजाइन करने के लिए कैसे इस तरह/आवेदन दे सकते हैं। आवेदन बहुत सारी प्रविष्टियों के साथ वास्तव में बड़ा होगा।

इसके अलावा मैं वास्तव में उपयोगी लिंक या किताबों की सराहना करता हूं। (कोई समस्या नहीं है मुझे आगे की जांच करने के लिए अगर मैं खोज सकते हैं या क्या पढ़ने के लिए है, जहां पता)

उत्तर

3

आप प्रत्येक रिकॉर्ड अपने क्षेत्रों के आधार पर एक 'स्कोर'

आप एक स्तंभ के स्कोर के आधार पर वजन सकता देने के लिए कोशिश कर सकते तुलना के लिए संपत्ति कितनी महत्वपूर्ण है (उदाहरण के लिए शीर्ष गति ब्रांड की तुलना में अधिक महत्वपूर्ण हो सकती है)

आप प्रत्येक रिकॉर्ड के लिए स्कोर के साथ समाप्त हो जाएंगे, और आप स्कोर और तुलना की तुलना करके समान रिकॉर्ड प्राप्त कर पाएंगे रिकॉर्ड्स जो +/- 5% (उदाहरण के लिए) हैं, जो आप देख रहे हैं

+1

मैं प्रत्येक फ़ील्ड के लिए यह 'दूरी' फ़ंक्शन पर बता सकता हूं कि फ़ील्ड के लिए दो मूल्य कितने दूर हैं। इसे फ़ील्ड वजन और मूल्यों के साथ गुणा किया जा सकता है। मैं संग्रहित प्रक्रियाओं को सोच रहा हूँ। – aaronasterling

1

पर एक नज़र डालें Lucene जैसे मौजूदा खोज इंजनों में से एक। वे इस तरह की कई चीजों को लागू करते हैं।

इस पत्र भी उपयोगी हो सकती: Supporting developers with natural language queries

2

डेटा में रिश्ते और समानता खोजने के तरीके Data Mining कहा जाता है, आपके मामले में आप पहले से ही क्या अलग-अलग समूहों को देखने के लिए आदेश में clustering और classify अपने डेटा की कोशिश कर सकते जो दिखाता है

मुझे लगता है कि this book डाटा खनन करने के लिए एक परिचय के लिए एक अच्छी शुरुआत है। उम्मीद है की यह मदद करेगा।

2

अपनी समस्या को हल करने के लिए, आप एक cluster algorithm उपयोग करना होगा। सबसे पहले, आपको एक समानता मीट्रिक को परिभाषित करने की आवश्यकता है, आपको अपने इनपुट टुपल्स (सभी Z3) और शेष डेटाबेस के बीच समानता की गणना करने की आवश्यकता है। आप k-means जैसे एल्गोरिदम का उपयोग कर प्रक्रिया को तेज कर सकते हैं। कृपया इस प्रश्न पर एक नज़र डालें, वहां आपको इसी तरह की समस्या पर चर्चा मिलेगी - Finding groups of similar strings in a large set of strings

यह लिंक भी बहुत उपयोगी है: http://matpalm.com/resemblance/

कार्यान्वयन के बारे में यदि आप (कई मशीनों की तुलना में और अधिक) tuples के लिए बहुत कुछ है आप http://mahout.apache.org/ उपयोग कर सकते हैं। यह हैडऑप पर आधारित मशीन लर्निंग फ्रेमवर्क है। आपको बहुत अधिक गणना शक्ति की आवश्यकता होगी, क्योंकि क्लस्टर एल्गोरिदम जटिल हैं।

1

वास्तव में आपके प्रश्न का उत्तर नहीं है, लेकिन आप कहते हैं कि आपके पास बहुत सी प्रविष्टियां हैं, आपको normalizing अपनी कार तालिका पर विचार करना चाहिए, ब्रांड को एक अलग तालिका और "कार नाम"/मॉडल को एक अलग तालिका में ले जाना चाहिए। यह लुकअप के दौरान तुलना करने के लिए डेटा की मात्रा को कम करेगा।

+0

हां निश्चित रूप से। मैं बस उदाहरण में एक टेबल चाहता था। मेरा आवेदन कारों के बारे में बिल्कुल नहीं है। – Ben