2011-01-10 9 views
12

mySQL & PHP खोज बनाने का सबसे अच्छा तरीका क्या है?एक स्मार्ट mySQL और PHP खोज इंजन बनाने का सबसे अच्छा तरीका?

मैं वर्तमान की तरह

% अवधि% चीजों का उपयोग कर रहा

मैं इसे परिणाम को पाने के भले ही वे यह थोड़ा गलत वर्तनी सक्षम होना चाहते हैं, उदाहरण के लिए:

फ़ील्ड मान = "वन: स्टॉप शॉप:

वे खोज:

एक दुकान बंद करो

या

एक स्टॉप शॉप

आदि .. मैं वास्तव में एक स्मार्ट खोज चाहते हैं ताकि वे जानकारी भले ही वे सही बात खोज ही नहीं करते हैं।

इस तरह की स्मार्ट खोज बनाने का सबसे अच्छा तरीका क्या है?

+0

जैसे कुछ ट्यूटोरियल की कोशिश क्यों नहीं: http://www.youtube.com/watch?v=6pW7mGr8oAU या http: //www.devshed.com/c/a/MySQL/building-a- खोज-Engine-with-MySQL-and-PHP-5/1/ – Jason

+1

पूरी तरह से अच्छे पूर्व-निर्मित वाले होने पर पहिया को पुन: आविष्कार क्यों करें ? ल्यूसीन देखें (http://lucene.apache.org/java/docs/index.html) और स्फिंक्स (http://sphinxsearch.com/) –

उत्तर

6

like '%term%' भयानक धीमी गति से और unoptimized है, तो आप इस स्तंभ के लिए पूर्ण पाठ जोड़ने के लिए चाहते हो सकता है, और use boolean mode for this

जैसे

match(column) against('+One +Shop +Stop' in boolean mode) 

मिनट शब्द लंबाई पर लें टिप्पणी 4 है, इसलिए, आपको इसे तीन में बदलने पर विचार करना होगा, और पूर्ण-पाठ खोज केवल myisam

अन्य ओपनसोर्स सर्च इंजन जैसे sphinx इस

के लिए आदर्श है
+0

अजीब सही है। आपको उस फ़ील्ड में एक पूर्ण-पाठ अनुक्रमणिका जोड़ने की आवश्यकता है जिसे आप खोजना चाहते हैं। फिर वास्तविक खोज करने के लिए एक मैच स्टेटमेंट करें। आप प्रासंगिकता से भी ऑर्डर कर सकते हैं। अधिक जानकारी के लिए गूगल। – dqhendricks

+3

सुनिश्चित करें कि यदि आपके पास पूर्ण-पाठ इंडेक्स का परीक्षण कर रहे हैं, तो आपके पास पर्याप्त परीक्षण डेटा हैं, यदि परिणाम कुल रिकॉर्ड की संख्या का 50% से अधिक हैं, तो यह एक असफल खोज के रूप में गिना जाता है। यदि आप इसे नहीं जानते हैं तो इससे आपकी सैनिटी में हस्तक्षेप हो सकता है। मैं अभी ठीक हूँ हालांकि। – Cups

5

आप अपने कच्चे डेटा पर खोज करके सबसे ज्यादा कुशल नहीं हो सकते हैं। इस प्रकार की टेक्स्ट खोज इस बात पर निर्भर करती है कि डेटा को कैसे अनुक्रमित किया जाता है (यह वह जगह है जहां Google बॉट Google के लिए आता है)।

तो, चरण 1 अनुक्रमणित है। यदि आपका डेटा कुछ वेब पृष्ठों में है, तो आप उपलब्ध मानक क्रॉलर का उपयोग कर सकते हैं (या यहां तक ​​कि अपने क्रॉलर को आसानी से भी बना सकते हैं, मैं क्रॉलर बनाने के लिए अजगर का सुझाव दूंगा)। यदि आपका डेटा कुछ फ़ाइल (वेब ​​ब्राउज़ करने योग्य नहीं) में है, तो अनुक्रमण के लिए, आपको सभी डेटा पढ़ने और उन्हें अनुक्रमणित करने के लिए एक प्रोग्राम लिखना होगा।

चरण 2 खोज रहा है। खोज दृष्टिकोण अनुक्रमण रणनीति पर निर्भर करता है। आईईईई एक्सप्लोर में खोज/एसीएम प्रकाशनों

http://www.phpdig.net/

http://sphinxsearch.com/

आप और अधिक जानना चाहते हैं, तो:

आप देख रहे हैं php-mysql आधारित प्रणाली के लिए, इन परियोजनाओं के कोड की समीक्षा अभिलेखागार। आपको इस विषय पर बहुत से कागजात प्रकाशित होंगे।

+0

यदि मेरे पास 300,000 + पृष्ठ हैं तो क्या होगा? – Latox

+0

यदि आपको वास्तव में 300,000+ पृष्ठों को अनुक्रमणित करने की आवश्यकता है, तो आप "वितरित खोज तकनीकों" जैसे विषयों पर बेहतर पढ़ते हैं। बड़े डेटा सेट के लिए MySQL का उपयोग करना अधिक कुशल नहीं होगा। आपको अपनी फाइल सिस्टम की आवश्यकता होगी। सौभाग्य से, आप कुछ खुली सोर्स फ़ाइल सिस्टम का उपयोग कर सकते हैं। व्यावहारिक रूप से, हमारे पास एक विशेष क्रॉलर है (सार्वजनिक रूप से खुला नहीं)। हम डेटा के गीगाबाइट को संभालते हैं। हमारे पास हमारे स्वयं के फाइल सिस्टम हैं और हमने अमेज़ॅन क्लाउड में अपना पूरा डेटा और क्रॉलर डाला है। अमेज़ॅन क्लाउड की कीमत इसके लायक है। –

+0

यदि आप कागजात खोजने के मूड में नहीं हैं, तो कम से कम "ल्यूसीन इन एक्शन" (आईएसबीएन 1-932394-28-1) की एक प्रति प्राप्त करें। आप कुछ सारांश प्राप्त कर सकते हैं। इसके अलावा, आप लुसीन (जावा आधारित) का उपयोग कर सकते हैं। लेकिन आपके प्रश्न में, आपने एक php-mysql समाधान के लिए कहा था। –

2

आप Soundex() फ़ंक्शन का उपयोग कर सकते हैं, यह दोनों PHP में उपलब्ध है और MySQL SOUNDEX() with MYSQL

+1

यह ओपी के मामले में उपयोगी हो सकता है या नहीं भी हो सकता है। उदाहरण के लिए, "स्टॉप" और "दुकान" के लिए ध्वनि कोड अलग-अलग हैं। –

5

AJreal सही है ...बस मैं मदद करने के लिए एक उदाहरण जोड़ना होगा सोचा:

$query = sprintf("SELECT *, " 
        . " MATCH(data) AGAINST('%s' IN BOOLEAN MODE) AS relevance " 
        . " FROM table_name" 
        . " ORDER BY relevance DESC LIMIT 20 ", 

आशा इस मदद करता है

संबंधित मुद्दे