2011-12-20 12 views
13

मैं वर्तमान में लुसीन का उपयोग कर वेबपृष्ठ अनुक्रमणित कर रहा हूं। इसका लक्ष्य जल्दी से निकालने में सक्षम होना चाहिए कि किस पृष्ठ में एक निश्चित अभिव्यक्ति (आमतौर पर 1, 2 या 3 शब्द) होती है, और कौन से दूसरे शब्द (या उनमें से 1to 3 का समूह) पृष्ठ में भी होते हैं। इसका उपयोग थिसॉरस (निश्चित शब्दावली) को बनाने/समृद्ध/परिवर्तित करने के लिए किया जाएगा।वाक्यांश क्वेरी और शिंगल फ़िल्टर का उपयोग करने के बीच क्या अंतर है?

लेख मैंने पाया से ऐसा प्रतीत होता समस्या n-grams (या पीटना) मिल रहा है।

Lucene एक ShingleFilter, एक ShingleMatrixFilter, और एक ShingleAnalyzerWrapper है, जो इस कार्य से संबंधित तो लग गया है।

इस presentation से, मैं Lucene भी शब्द (बुलाया धोवन) की एक निश्चित संख्या के द्वारा अलग शब्दों के लिए खोज कर सकते हैं कि सीखा है। एक उदाहरण here प्रदान किया गया है।

हालांकि, मैं स्पष्ट रूप से उन दृष्टिकोणों के बीच अंतर को समझ नहीं पा रहा हूं? क्या वे मूल रूप से अलग हैं, या यह एक प्रदर्शन/सूचकांक आकार पसंद है जिसे आपको बनाना है?

ShingleMatrixFilter और ShingleFilter के बीच क्या अंतर है?

आशा है कि एक लुसीन गुरु इस प्रश्न को ढूंढेंगे, और उत्तर ;-)!

उत्तर

17

वाक्यांश बनाम शिंगल का उपयोग करने के बीच अंतर मुख्य रूप से प्रदर्शन और स्कोरिंग शामिल करते हैं।

सामान्य प्रश्नों में वाक्यांश प्रश्नों ("foo bar" कहें) का उपयोग करते समय जहां एकल शब्द इंडेक्स में होते हैं, वाक्यांश प्रश्नों को "foo" और "bar" के लिए उलटा इंडेक्स चलाना होता है और दस्तावेज़ों को ढूंढना होता है दोनों शर्तें, फिर उन दस्तावेजों को खोजने के लिए उन पदों में से प्रत्येक के भीतर अपनी स्थिति सूचियां चलाएं जहां "foo" "बार" से ठीक पहले दिखाई देता था।

यह दोनों प्रदर्शन और स्कोरिंग के लिए कुछ लागत है:

  1. पद (.prx) अनुक्रमित किया जाना चाहिए और खोज की है, इस उल्टे सूचकांक जो अनुक्रमण और खोज बार में वृद्धि होगी के लिए एक अतिरिक्त "आयाम" की तरह है
  2. क्योंकि उलटा इंडेक्स में केवल व्यक्तिगत शब्द दिखाई देते हैं, वहां कोई वास्तविक "वाक्यांश आईडीएफ" गणना नहीं की जाती है (इससे आपको प्रभावित नहीं हो सकता है)। तो इसके बजाय यह आईडीएफ शब्द के योग के आधार पर अनुमानित है।

दूसरी ओर, यदि आप शिंगल्स का उपयोग करते हैं, तो आप दूसरे शब्दों में शब्द एन-ग्राम को भी अनुक्रमणित कर रहे हैं, यदि आप आकार 2 तक झुका रहे हैं, तो आपके पास "foo bar" जैसे शब्द भी होंगे सूचकांक। इसका अर्थ यह वाक्यांश क्वेरी के लिए है, इसे किसी भी स्थिति सूचियों का उपयोग किये बिना, सरल टर्मक्वायर के रूप में पार्स किया जाएगा। और चूंकि अब यह एक "वास्तविक शब्द" है, वाक्यांश आईडीएफ सटीक होगा, क्योंकि हम जानते हैं कि यह "शब्द" कितने दस्तावेज़ मौजूद है।

लेकिन दाद का उपयोग कर कुछ लागत के साथ-साथ हैं:

  1. वृद्धि अवधि शब्दकोश, अवधि सूचकांक, और पोस्टिंग सूची आकार, हालांकि यह एक उचित तालमेल हो सकता है खासकर यदि आप पूरी तरह से Field.setIndexOptions साथ पूरी तरह से अक्षम पदों।
  2. इंडेक्सिंग के विश्लेषण चरण के दौरान कुछ अतिरिक्त लागत: हालांकि शिंगलफिल्टर अच्छी तरह से अनुकूलित है और बहुत तेज़ है।
  3. "मैला वाक्यांश प्रश्न" या अचूक वाक्यांश मिलानों की गणना करने का कोई स्पष्ट तरीका नहीं है, हालांकि इसका अनुमान लगाया जा सकता है, उदा।आकार 2 के shingles के साथ "foo bar baz" के वाक्यांश के लिए, आपके पास दो टोकन होंगे: foo_bar, bar_baz और आप एक अचूक अनुमान के लिए कुछ ल्यूसीन के अन्य प्रश्नों (जैसे BooleanQuery) के माध्यम से खोज को कार्यान्वित कर सकते हैं।

सामान्य रूप से, शिंगल्स या कॉमनग्राम जैसी चीज़ों के साथ इंडेक्सिंग शब्द-एनग्राम केवल स्थितित्मक प्रश्नों की लागत को कम करने या वाक्यांश स्कोरिंग बढ़ाने के लिए एक ट्रेडऑफ (काफी विशेषज्ञ) है।

लेकिन इस सामान के लिए वास्तविक दुनिया उपयोग के मामलों रहे हैं, एक अच्छा उदाहरण यहाँ उपलब्ध है: http://www.hathitrust.org/blogs/large-scale-search/slow-queries-and-common-words-part-2

+0

इस विस्तृत जवाब (स्वीकार किए जाते हैं) के लिए धन्यवाद। ShingleFilter और ShingleMatrixFilter के बीच के अंतर पर टिप्पणी कर सकते हैं? – blackbox

+0

वास्तव में अच्छी व्याख्या। इस आलेख ने मुझे उदाहरणों पर कुछ हाथों से शिंगलों को समझने में मदद की: https://www.elastic.co/blog/searching-with-shingles – krinker

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