2010-02-22 7 views
5

यह वास्तव में एक वास्तविक समस्या है जिस पर मैं काम कर रहा हूं, लेकिन सादगी के लिए, आइए दिखाएं कि मैं Google हूं।एकाधिक मानों के लिए इंडेक्स को खोजने के लिए एल्गोरिदम क्या है?

उपयोगकर्ता को "नैनोस्केल टुपपरवेयर" की खोज करने के लिए कहें। दोनों शब्दों के साथ बहुत सारे पेज नहीं हैं ... केवल 3k। लेकिन "नैनोस्केल" के साथ ~ 2 मिलियन पेज और "टुपपरवेयर" के साथ ~ 4 मिलियन हैं। फिर भी, Google ने 0.3 सेकंड में मेरे लिए 3k पाता है।

यह कैसे करता है?

एकमात्र एल्गोरिदम मुझे पता है कि "नैनोस्केल" के लिए दस्तावेज़ प्राप्त करना, "टुपपरवेयर" के लिए दस्तावेज़ प्राप्त करना है, और फिर सूची विलय करना है। लेकिन वह ओ (एन + एम), या ओ (5,000,000) है जो थोड़ा धीमा लगता है। विशेष रूप से अगर मैं इसे एक उबेर-तेज़ क्लस्टर के बजाय डेस्कटॉप पर चला रहा हूं।

तो क्या वास्तव में Google क्या कर रहा है, और उनकी गति ज्यादातर इस तथ्य के कारण है कि वे अपने बड़े पैमाने पर वितरित क्लस्टर पर इस महंगे गणना को चला रहे हैं?

या क्या कोई बेहतर एल्गोरिदम है जिसे मुझे पता नहीं है? विकिपीडिया और Google मेरे लिए कुछ भी नहीं बदल रहे हैं।

संपादित करें:

के बाद से लोगों को मेरे सवाल का गूगल पहलू पर ध्यान केंद्रित करने लगते हैं, मुझे लगता है मैं वास्तविक संदर्भ में यह को फिर से करेंगे।

मेरे पास कुंजी/मूल्य जोड़े के रूप में लागू कई बहुत बड़ी (लाखों आइटम) इंडेक्स हैं। कुंजी सरल शब्द हैं, मूल्य दस्तावेज़ों के समूह हैं। एक आम उपयोग मामला विभिन्न इंडेक्स पर कई खोजों पर परिणामों के छेड़छाड़ को प्राप्त करना है: दर्द बिंदु दस्तावेज़ सेट के चौराहे को प्राप्त कर रहा है।

मैं अपनी अनुक्रमणिका को फिर से कार्यान्वित कर सकता हूं हालांकि मैं चाहता हूं - यह ज्यादातर इस समय एक अकादमिक परियोजना है।

+0

शायद इसमें बहुत से चालाक कैशिंग शामिल हैं ... –

+0

मुझे यकीन है कि एक लाख अन्य चालाक अनुकूलन के साथ भी है। लेकिन मुझे सच में संदेह है कि वे मेरी खोज के * परिणाम * को कैश कर रहे हैं, इसलिए मैं अभी भी उत्सुक हूं - वास्तव में परिणाम सूची प्राप्त करने के लिए वे किस एल्गोरिदम का उपयोग कर रहे हैं? – levand

+0

Google के पास सूचकांक हैं। सूचकांक के बहुत सारे। संभवतः यह क्या करता है 'नैनोस्केल' शब्द के लिए प्री-जेनरेटेड इंडेक्स को पकड़ लेता है, और उसके बाद सूचीबद्ध प्रत्येक पृष्ठ के लिए, उस पृष्ठ के सभी शब्दों की पूर्व-जेनरेट की गई क्रमबद्ध सूची को देखें, यह देखने के लिए कि 'टुपपरवेयर' होता है या नहीं। वह हिस्सा बड़े पैमाने पर वितरित किया जाएगा। यह परिणाम कैश करेगा, ताकि अगली बार जब आप एक ही शब्द खोज सकें तो यह केवल पूर्व-जनरेटेड "नैनोस्केल टुपपरवेयर" अनुक्रमणिका को पकड़ लेगा। निश्चित रूप से Google ने आवृत्ति के अनुसार शीर्ष 10,000 अंग्रेजी शब्दों में से किसी भी 2 के संभावित संयोजन के लिए प्री-जेनरेट किए गए इंडेक्स हैं: यह "केवल" पृष्ठों की 100 मिलियन सूचियां हैं। –

उत्तर

3

जिस तरीके से आप इसका वर्णन कर रहे हैं, आपके पास प्रत्येक शब्द (दस्तावेजों की सूची) के लिए एक पोस्टिंग सूची के साथ पहले से ही inverted index है। मुझे प्रत्येक शब्द के लिए पोस्टिंग सूचियों में शामिल होने और मेरे सर्वोत्तम ज्ञान के लिए बेहतर समाधान के बारे में पता नहीं है, यह ल्यूसीन डू जैसे पूर्ण टेक्स्ट इंडेक्सिंग समाधान है। वहाँ, आप यहाँ कर सकते हैं स्पष्ट अनुकूलन की एक जोड़ी हालांकि:

  1. आप स्मृति में आपके डेटासेट स्टोर कर सकते हैं, तो कई मशीनों के लिए भी वितरित, आप बहुत जल्दी परिणाम सेट merge join कर सकते हैं वास्तव में, क्या की तुलना में हो सकता है डिस्क की तलाश के लिए आवश्यक है।
  2. 'बेवकूफ' विलय एल्गोरिदम में शामिल होता है प्रत्येक पॉइंटर पर एक पॉइंटर को प्रत्येक गैर-मैच पर अग्रिम करता है, लेकिन यदि आपकी पोस्टिंग सूचियां स्वयं अनुक्रमित होती हैं, तो आप अधिकतम व्यक्तिगत मूल्यों को ले कर और बेहतर मांग कर बहुत बेहतर कर सकते हैं अन्य सभी पोस्टिंग सूचियों में उस कुंजी से अधिक या उसके बराबर पहले मान पर - संभवतः प्रक्रिया में लाखों अप्रासंगिक परिणाम छोड़ना। इसे zig-zag merge join कहा गया है।
0

जो आप वर्णन कर रहे हैं उसे n-grams कहा जाता है।

Google नामक एक एल्गोरिदम का उपयोग करता है जो MapReduce का उपयोग करके लागू किए गए परिणामों को खोजने और क्रमबद्ध करने के लिए करता है।

अतीत में इन सभी विषयों पर स्टैक ओवरफ्लो की लंबाई पर चर्चा की गई है। उन्हें देखने के लिए काफी आसान होना चाहिए।

यह शायद आपको पूरे समूह की मदद नहीं करता है क्योंकि आपके पास मैपरेडस चलाने के लिए एक विशाल वितरित प्रणाली नहीं है, लेकिन चूंकि आपने वास्तव में index पर प्रयास करने के बारे में कोई जानकारी नहीं दी है, आपकी समस्या के अनुकूल कुछ सुझाव देना मुश्किल है।

+0

यह सिर्फ तकनीकी-बेबले का एक गुच्छा है। प्रश्न में एन-ग्राम के साथ बिल्कुल कुछ नहीं है, और टोकननाइजेशन का लिंक विचित्र है। – Fuser97381

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