ल्यूसिन कैसे काम करता है


90

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

सूचकांक के साथ mysql5 पाठ खोज का उपयोग करके एक पाठ खोज क्वेरी मेरे मामले में लगभग 18 मिनट लेती है। एक ही क्वेरी के लिए एक चमकदार खोज एक सेकंड से भी कम समय लेती है।


2
क्या मैं इस प्रश्न को सामुदायिक विकि के रूप में परिवर्तित करने का अनुरोध कर सकता हूँ? ल्यूसीन अब एक मंच की तरह लग रहा है।
asyncwait

जवाबों:


75

Lucene एक उलटा पूर्ण-पाठ सूचकांक है। इसका मतलब है कि यह सभी दस्तावेजों को लेता है, उन्हें शब्दों में विभाजित करता है, और फिर प्रत्येक शब्द के लिए एक सूचकांक बनाता है । चूंकि इंडेक्स एक सटीक स्ट्रिंग-मैच है, अनियंत्रित है, यह बेहद तेज हो सकता है। Hypothetically, एक varcharक्षेत्र पर एक SQL unordered सूचकांक बस के रूप में तेजी से हो सकता है, और वास्तव में मुझे लगता है कि आप पाएंगे बड़े डेटाबेस एक साधारण स्ट्रिंग-समानता क्वेरी उस मामले में बहुत जल्दी कर सकते हैं।

लेनिन को लेनदेन प्रसंस्करण के लिए अनुकूलन करने की आवश्यकता नहीं है। जब आप एक दस्तावेज़ जोड़ते हैं, तो यह सुनिश्चित करने की आवश्यकता नहीं है कि प्रश्न इसे तुरंत देखते हैं । और इसे मौजूदा दस्तावेज़ों के अपडेट के लिए ऑप्टिमाइज़ करने की आवश्यकता नहीं है।

हालांकि, दिन के अंत में, यदि आप वास्तव में जानना चाहते हैं, तो आपको स्रोत को पढ़ने की आवश्यकता है। आपके द्वारा संदर्भित दोनों चीजें खुले स्रोत हैं, आखिरकार।


अगर मैं सही ढंग से समझूं, तो टेक्स्ट सर्च इंजन को अलग करने वाली चीज यह है कि वे मल्टी-वर्ड सर्च को कैसे हैंडल करते हैं और रियल टाइम में कई इंडेक्स में सर्च के रिजल्ट को जोड़ते हैं। मैं इसके लिए ल्यूसिन स्रोत से परामर्श करने का सुझाव नहीं दूंगा। पाठ खोज सिद्धांत के बारे में थोड़ा पढ़ना बेहतर होगा, @ एलियनकोडर्स के जवाब से मुझे मदद मिली।
बजे क्रिस डुट्रो

1
@bmargulies, अनुक्रमण "शब्द प्रति" है, तो क्यों stackoverflow उपयोगकर्ता की खोज करता है stackoverflow.com/users मैचों सबस्ट्रिंग अनुमति देते हैं?
पचेरियर 12

2
यह पूरी किताब के उत्तरों के लिए जगह नहीं है। वहाँ बुनियादी अवधारणा पर विस्तार से किसी भी संख्या में हैं।
बामरगुलिस

आपका क्या मतलब है "प्रत्येक शब्द के लिए एक सूचकांक" ... यदि मैं "एबीसी" टाइप करना शुरू करता हूं, तो यह दस्तावेज़ में "एबीसी" कैसे खोजने जा रहा है?
अलेक्जेंडर मिल्स

1
शब्द से दस्तावेज़ के लिए एक सूचकांक (बी-ट्री) दस्तावेज़ में शब्दों द्वारा दस्तावेजों की खोज कर सकता है क्योंकि ऐसे सूचकांक की तालिका (शब्द, दस्तावेज़) है जहां सूचकांक शब्द स्तंभ पर है। एक क्वेरी पर विचार करें जैसे: "पुलिस, शब्दों के साथ दस्तावेजों का पता लगाएं, 'अपराध', 'आंकड़े'"। शब्द सूचकांक खोजकर, आप उनमें से एक शब्द के साथ O (N) दस्तावेज़ प्राप्त करने के लिए तीन लॉग (N) खोज कर सकते हैं। तब आप दो O (N) लूप सेट कर सकते हैं जिसमें एक सेट होता है जिसमें सभी तीन शब्द होते हैं। यद्यपि यह सैद्धांतिक रूप से एक O (N) ऑपरेशन है, अधिकांश दस्तावेज़ों में सभी तीन शब्द नहीं हैं इसलिए O (n) जहां n <N
Calicoder

34

ल्यूसीन एक बड़ा सूचकांक बनाता है। सूचकांक में शब्द आईडी, डॉक्स की संख्या जहां शब्द मौजूद है, और उन दस्तावेजों में शब्द की स्थिति है। इसलिए जब आप एक एकल शब्द क्वेरी देते हैं तो यह केवल सूचकांक (O (1) समय जटिलता) को खोजता है। फिर परिणाम को अलग-अलग एल्गोरिदम का उपयोग करके रैंक किया जाता है। बहु-शब्द क्वेरी के लिए बस उन फाइलों के सेट का प्रतिच्छेदन लें, जहाँ शब्द मौजूद हैं। इस प्रकार ल्यूसीन बहुत तेजी से होता है।

अधिक जानकारी के लिए Google डेवलपर- http://infolab.stanford.edu/~backrub/google.html यह लेख पढ़ें


8
उस कागज पर स्किम्ड, यह काफी मददगार था। विशेष रूप से "4.5 खोज" का उत्तर था जो मैं खोज रहा था। विशेष रूप से, यह एक ओ (1) हैश खोज की तरह लगता है जिसका उपयोग व्यक्तिगत शब्दों के लिए किया जाता है, लेकिन फिर 40,000 दस्तावेज़ सीमा के साथ परिणामों में शामिल होने के लिए एक ओ (एन) स्कैन का उपयोग किया जाता है। मुझे लगता है कि इस कार्य को विभाजित करने के लिए एक मैप-कम एल्गोरिदम का उपयोग किया जाता है ताकि उपयोगकर्ता को तात्कालिक परिणाम मिले।
बजे क्रिस डुट्रो

एक लोकप्रिय एल्गोरिथ्म कबूतर रैंक एल्गोरिथ्म है। हालांकि मुझे इसके बारे में ज्यादा जानकारी नहीं है।
एलियनकोडर

3
वह कागज मनोरंजक है: "इस पत्र में, हम Google, एक प्रोटोटाइप प्रस्तुत करते हैं ..."। मुझे लगता है कि Google हमेशा एक मेगा-निगम नहीं था।
बटंस .४०

ल्यूसीन को नहीं जानते, लेकिन एक सवाल: रैंकिंग प्रत्येक खोज पर होती है? या क्या यह दस्तावेजों को पूर्व क्रम में बनाए रखता है? यदि यह दस्तावेज़ों को रैंक के अनुसार अग्रिम रूप से बनाए रखता है तो यह कई शब्दों की क्वेरी के लिए कैसे बनाए रखता है?
विकास प्रसाद

लिंक अब टूट गया है। @alienCoder
CEGRD

20

एक शब्द में: अनुक्रमण।

ल्यूसीन आपके दस्तावेज़ का एक सूचकांक बनाता है जो इसे और अधिक तेज़ी से खोजने की अनुमति देता है।

यह सूची O (N) डेटा संरचना और हैश तालिका O (1) डेटा संरचना के बीच समान अंतर है। सूची को पूरे संग्रह से गुजरना पड़ता है कि आप क्या चाहते हैं। हैश टेबल में एक इंडेक्स होता है, जिससे यह पता लगाया जा सकता है कि वांछित वस्तु कहां है और बस इसे लाना है।

अपडेट करें:

मुझे यकीन नहीं है कि आपके द्वारा "ल्यूसिन इंडेक्स खोजों से बहुत अधिक तेज़ हैं जो mysql इंडेक्स खोजों की तुलना में बहुत तेज़ हैं।"

मेरा अनुमान है कि आप दस्तावेज़ खोजने के लिए MySQL "WHERE दस्तावेज़ LIKE '% वाक्यांश%'" का उपयोग कर रहे हैं। यदि यह सच है, तो MySQL को हर पंक्ति पर एक टेबल स्कैन करना होगा, जो O (N) होगा।

ल्यूसीन को दस्तावेज़ को टोकन में पार्स करने के लिए मिलता है, उन्हें अपनी दिशा में एन-ग्राम में समूहित करें, और उनमें से प्रत्येक के लिए अनुक्रमित गणना करें। यह एक अनुक्रमित ल्यूसीन दस्तावेज़ में एक शब्द खोजने के लिए ओ (1) है।


10
हां मैं इंडेक्सिंग भाग को समझता हूं, लेकिन फिर से, ल्यूसिन इंडेक्स खोजों को mysql इंडेक्स खोजों की तुलना में बहुत तेज है। ऐसा कैसे होता है
मिडहट

8

ल्यूसीन टर्म फ़्रीक्वेंसी और इनवर्स डॉक्यूमेंट फ़्रीक्वेंसी के साथ काम करता है । यह डॉक्यूमेंट के साथ प्रत्येक शब्द की एक इंडेक्स मैपिंग करता है और यह फ्रिक्वेंसी काउंट होता है जो डॉक्यूमेंट पर उलटा इंडेक्स के अलावा कुछ नहीं होता है।

उदाहरण :

फ़ाइल 1: रैंडम एक्सेस मेमोरी मुख्य मेमोरी है।

फाइल 2: हार्ड डिस्क सेकेंडरी मेमोरी है।

Lucene एक रिवर्स इंडेक्स जैसा कुछ बनाता है

फ़ाइल 1:

शब्द: यादृच्छिक

आवृत्ति: १

पद: 0

शब्द: स्मृति

आवृत्ति: २

स्थिति: 3

पद: 6

तो यह खोज की गई सामग्री को जल्दी से खोज और पुनर्प्राप्त करने में सक्षम है। जब खोज क्वेरी के लिए बहुत अधिक मैच होते हैं तो यह वजन के आधार पर परिणाम को आउटपुट करता है। खोज क्वेरी "मुख्य मेमोरी" पर विचार करें, यह सभी 4 शब्दों को व्यक्तिगत रूप से खोजती है और परिणाम जैसा होगा,

मुख्य

फ़ाइल 1: आवृत्ति - 1

स्मृति

फ़ाइल 1: आवृत्ति - 2

फ़ाइल 2: आवृत्ति - 1

परिणाम होगा File1 और उसके बाद File2 होगा । सबसे आम शब्दों जैसे 'और', 'या', 'पर भार से दूर ले जाने से रोकने के लिए' यह उलटा दस्तावेज़ आवृत्ति पर विचार करता है (यानी 'यह शब्द के वजन को कम करता है जो दस्तावेज़ सेट के बीच सबसे लोकप्रिय है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.