Google

2009-12-30 23 views
11

जैसे पूर्ण पाठ खोज मैं नोट्स की उपयोगकर्ता जेनरेट की गई सूची को खोजने के लिए अपने ऑफ़लाइन (एंड्रॉइड) एप्लिकेशन में पूर्ण-पाठ-खोज को कार्यान्वित करना चाहता हूं।Google

मैं यह सिर्फ गूगल की तरह व्यवहार करने के लिए मेरे प्रारंभिक आवश्यकताएँ हैं

(के बाद से ज्यादातर लोगों को पहले से ही Google क्वेरी करने के लिए उपयोग किया जाता है) चाहते हैं:

  • फास्ट: गूगल या के रूप में तेजी से संभव के रूप में की तरह, प्रत्येक 20000 शब्दों के साथ 100000 दस्तावेज़ हैं।
  • दो शब्दों के लिए खोज केवल दस्तावेजों है कि दोनों शब्द (न सिर्फ एक शब्द) होते हैं (जब तक OR ऑपरेटर प्रयोग किया जाता है)
  • मामले असंवेदनशील लौटना चाहिए (उर्फ: सामान्य): यदि मैं शब्द 'हैलो' और मैं 'हैलो' के लिए खोजें यह मेल खाना चाहिए।
  • डायक्रिटिकल मार्क असंवेदनशील: यदि मेरे पास 'asi' शब्द 'asi' के लिए खोज होना चाहिए। स्पेनिश में, कई लोग, गलत तरीके से, या तो डाइक्रिटिकल अंक नहीं डालते हैं या उन्हें सही ढंग से डालने में असफल होते हैं।
  • शब्द उन्मूलन रोकें: 'और', 'the' या 'for' जैसे अर्थहीन शब्दों को एक बड़ी अनुक्रमणिका नहीं होना चाहिए।
  • शब्दकोश प्रतिस्थापन (उर्फ: स्टेम शब्द): समान शब्दों को एक के रूप में अनुक्रमित किया जाना चाहिए। उदाहरण के लिए, 'भूख' और 'भूख' के उदाहरणों को 'भूख' से बदला जाना चाहिए।
  • वाक्यांश खोज: यदि मेरे पास 'हैलो वर्ल्ड' टेक्स्ट है! 'वर्ल्ड हैलो' की खोज '' से मेल नहीं खानी चाहिए, लेकिन "हैलो वर्ल्ड" की खोज से मेल खाना चाहिए।
  • कोई फ़ील्ड निर्दिष्ट नहीं है (मल्टीफ़िल्ड दस्तावेज़ों में) यदि कोई फ़ील्ड निर्दिष्ट नहीं है (केवल एक डिफ़ॉल्ट फ़ील्ड नहीं)
  • लोकप्रिय खोजों को टाइप करते समय खोज परिणामों में स्वत: पूर्णता। (बस Google सुझाव की तरह)

Google के रूप में जितना संभव हो उतना व्यवहार करने के लिए मैं एक पूर्ण-पाठ-खोज इंजन को कैसे कॉन्फ़िगर कर सकता हूं?

+1

यदि आप लुसीन की तरफ इशारा करते हैं, जो इनमें से कई बॉक्स को बाहर रखता है और एक्स्टेंसिबल है, तो क्या आप इस समस्या के बारे में विशिष्ट हो सकते हैं कि आप क्या कर रहे हैं? –

+0

आप क्या खोज रहे हैं? – SLaks

+0

आपको एहसास है कि Google http://en.wikipedia.org/wiki/Query_expansion को नियोजित करता है और अन्य लोगों द्वारा खोज इतिहास का उपयोग करता है। यदि हर कोई "कंप्यूटर चूहों" की खोज करता है तो yahoo.com पर क्लिक करना (इसे बनाना), फिर समय के साथ yahoo.com "कंप्यूटर चूहों" के लिए पहला खोज परिणाम बन जाएगा। –

उत्तर

14

मुझे लगता है कि Lucene आपकी आवश्यकताओं को पूरा कर सकता है। आपको Solr का उपयोग करने पर भी विचार करना चाहिए, जिसमें समान कार्यक्षमता है और इसे स्थापित करना बहुत आसान है।

मैं ल्यूसीन का उपयोग करके प्रत्येक आवश्यकता को अलग से चर्चा करूंगा। मेरा मानना ​​है कि सोलर के पास समान तंत्र हैं।

  • फास्ट: गूगल या जितनी जल्दी हो सके, 200 सौ शब्दों से प्रत्येक के साथ 100000 दस्तावेज होने की तरह।

यह दोनों Lucene और Solr के लिए एक उचित सूचकांक आकार, क्वेरी प्रति मिलीसेकेंड के कई दसियों में पुनः प्राप्ति के लिए सक्षम करने है।

  • दो शब्दों के लिए खोज केवल दस्तावेजों है कि दोनों शब्द (न सिर्फ एक शब्द) होते हैं लौटना चाहिए (जब तक OR ऑपरेटर प्रयोग किया जाता है)

आप क्या कर सकते हैं कि एक BooleanQuery के साथ प्रयोग ल्यूसीन में MUST डिफ़ॉल्ट रूप से। और अगर मैं शब्द 'हैलो' मैं 'हैलो' यह होना चाहिए के लिए खोज:

  • मामले असंवेदनशील (उर्फ:: सामान्य)

    अगले चार आवश्यकताओं को एक Lucene Analyzer अनुरूपण के द्वारा नियंत्रित किया जा सकता है मैच।

एक LowerCaseFilter इस के लिए इस्तेमाल किया जा सकता है।

  • विशेषक चिह्न असंवेदनशील: यदि मैं शब्द 'असी' के लिए एक खोज है 'एएसआई' मेल खाना चाहिए। स्पेनिश में, कई लोग, गलत तरीके से, या तो डाइक्रिटिकल अंक नहीं डालते हैं या उन्हें सही ढंग से डालने में असफल होते हैं।

इसके लिए यूनिकोड सामान्यीकरण के बाद डायक्रिटिक हटाने की आवश्यकता होती है। आप इसके लिए एक कस्टम विश्लेषक बना सकते हैं।

  • बंद करो शब्द उन्मूलन: की तरह एक विशाल सूचकांक अर्थहीन शब्द नहीं करने के लिए 'और', '' या 'के लिए' सभी को अनुक्रमित नहीं किया जाना चाहिए।

एक StopFilter को हटा Lucene में शब्दों बंद करो।

  • शब्दकोश प्रतिस्थापन (उर्फ: शब्द स्टेम): इसी प्रकार के शब्द एक के रूप में सूचीबद्ध किया जाना चाहिए। उदाहरण के लिए, 'भूख' और 'भूख' के उदाहरणों को 'भूख' से बदला जाना चाहिए।

Lucene कई Snowball Stemmers है। उनमें से एक उपयुक्त हो सकता है।

  • वाक्यांश खोज: यदि मैं पाठ 'नमस्ते दुनिया है!'दुनिया की हैलो' की खोज 'से मेल नहीं खानी चाहिए, लेकिन "हैलो वर्ल्ड" की खोज से मेल खाना चाहिए।

यह Lucene PhraseQuery विशेष क्वेरी से आच्छादित है।

जैसा कि आप देख सकते हैं, लुसीन सभी आवश्यक कार्यक्षमताओं को शामिल करता है। एक और सामान्य तस्वीर पाने के लिए, मैं Lucene in Action, The Apache Lucene Wiki या The Lucid Imagination Site पुस्तक का सुझाव देता हूं।

2

एक Google Search Appliance खरीदें (मैं ज्यादातर मुक्त स्रोत, जावा में और विशेष रूप से Lucene में दिलचस्पी है)। या, टिप्पणियों के अनुसार, Lucene का उपयोग करें जैसा आपने पहले ही उल्लेख किया है।

+1

एक Google खोज उपकरण ऑफ़लाइन एंड्रॉइड एप्लिकेशन में डेटा खोजने के लिए एक अच्छा जवाब नहीं है। –

+2

मेरे उत्तर पोस्ट करने के 7 घंटे बाद एंड्रॉइड बिट जोड़ा गया था। 3 साल बाद खोज परिदृश्य काफी बदल गया है। –

3

लुसीन के लिए इनमें से बहुत से व्यवहार डिफ़ॉल्ट हैं। पहले (सभी शर्तों सहित) नहीं है, लेकिन यदि आप डिफ़ॉल्ट ऑपरेटर निर्धारित करके इस व्यवहार के लिए मजबूर कर सकते हैं:

MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer()); 
parser.setDefaultOperator(QueryParser.AND_OPERATOR); 

मैं जानता हूँ कि 2 आइटम, 4, और 6 संभव हो रहे हैं कि, और IIRC, वे डिफ़ॉल्ट रूप से होता है। मुझे आइटम 3 और 5 के बारे में निश्चित नहीं है, लेकिन लुसीन अनुकूलन विकल्पों का एक टन प्रदान करता है, इसलिए मैं आपके डेटा के साथ एक प्रमाण-अवधारणा को कार्यान्वित करने का सुझाव दूंगा ताकि यह देखने के लिए कि यह इन आवश्यकताओं को भी पूरा करता है या नहीं।

0

जब तक आप कोई खोज इंजन नहीं खरीदते, तो आपके पास लुसीन, नच, अपाचे सोलर और कुछ अन्य हैं।

0

हाइपरएसक्यूएल एक शुद्ध-जावा एसक्यूएल कार्यान्वयन है जिसे SQLite के रूप में आसानी से चलाया जा सकता है। आप अपनी पूर्ण-पाठ क्षमताओं का उपयोग कर सकते हैं और पहिया को फिर से बनाने के लिए पूछताछ कर सकते हैं, लेकिन जैसा कि अन्य टिप्पणीकारों ने इंगित किया है कि मौजूदा कार्यान्वयन शायद सबसे अच्छा है।