2012-06-15 14 views
6

हमारे पास एक छोटा डेटा सेट है और एक ऑटो-पूर्ण इनपुट बॉक्स को पॉप्युलेट करने के लिए इसे एक चालाक तरीके से खोजना चाहते हैं। उपयोगकर्ता एक प्रकार की इकाई खोजना चाहता है, लेकिन संबंधित प्रकारों के गुणों में डालने में सक्षम होना चाहिए।क्या सोलर या लोचदार खोज जैसे कुछ है जिसका उपयोग क्लाइंट पर केवल जावास्क्रिप्ट में किया जा सकता है?

हमारे आवेदन के रूप में बहुत उद्योग विशेष है, मैं एक अधिक सापेक्षिक संदर्भ में सार प्रश्न डाल करने की कोशिश करेंगे:

उदाहरण: उपयोगकर्ता फल की एक निश्चित प्रकार का चयन करना चाहता है और एक बहुत उपयोग कर सकते हैं इसके लिए खोज करने के लिए फल की विभिन्न विशेषताओं का। वह इसका नाम (सेब), एक ही फल को विशिष्ट प्रकार के (सुनहरा स्वादिष्ट), स्थानीयकृत संस्करण (Apfel, تفاح, Pomme) की खोज कर सकते, लेकिन यह भी रूप में इस तरह के भोजन युक्त अन्य विशेषताओं, फल (पांडाउडी, साइडर), या इसके विवरण की पूर्ण-पाठ खोज से भी परिणाम।

आम तौर पर मैं solr या elasticsearch जैसे कुछ उपयोग करना चाहता हूं, लेकिन हमारे डेटा सेट में अधिकतम 200 तत्वों की 4-5 संबद्ध इकाइयों के साथ वास्तव में बड़ा नहीं है। इसके अलावा यह हर दूसरे सप्ताह कुछ संपादकीय परिवर्धन के साथ बहुत स्थिर रहेंगे। इसलिए हमने किसी प्रकार की अनुक्रमणिका को प्रबंधित करने और खोजने के लिए ब्राउज़र के डेटा स्टोर का उपयोग करने के बारे में सोचा। समस्या यह है कि हमारे शोध में हमें कुछ भी नहीं मिला जो Web SQL या Indexed DB सारणित करने से बहुत दूर है।

क्या कोई ऐसी परियोजनाएं या पुस्तकालय हैं जो सोलर या लोचदार खोज जैसे कुछ करते हैं और छोटे डेटा-सेट के लिए क्लाइंट-साइड पर उपयोग किए जा सकते हैं? हम निम्नलिखित सुविधाओं

  • फास्ट खोज
  • पूर्व प्रसंस्करण के लिए देख रहे हैं (tokenization, छानने ...)
  • आदेश
  • रैंकिंग, क्वेरी बढ़ाने

यह पर काम करना चाहिए हाल के ब्राउज़र और मोबाइल, अन्य ब्राउज़रों के लिए गूंगा फॉलबैक (यानी पूर्ण पाठ खोज) स्वीकार्य

उत्तर

3

इंडेक्सड डीबी काम करने के लिए अविश्वसनीय रूप से बोझिल है और मुझे नहीं लगता कि यह कुछ संशोधनों के बिना आप जो चाहते हैं वह करेगा।

WebSQL मैं प्रतिलिपि प्राप्त साथ क्रोम WebSQL (SQLite) (FT3) का उपयोग करें और आप इसके साथ कुछ उन्नत क्वेरी और यह स्वत: वजन परिणाम कर सकते हैं। उदाहरण के लिए:

table_ft3 संरचना = [आईडी, नाम, विवरण, पालतू]

और आप साथ क्वेरी कर सकता है "table_ft3 से आईडी का चयन करें जहां table_ft3 मैच 'word1 WORD2 wordfuzzy * -notme + आवश्यक नाम: जॉन edwar * मैरी पालतू जानवर: कुत्ते बिल्ली '

हालांकि, यह क्रोम तक ही सीमित है। लगभग 5 शब्दों के साथ 560k पंक्तियों की एक मेज पर प्रत्येक यह बहुत तेज़, 10ms और उससे कम है।

JSLinq - http://jslinq.codeplex.com/ यह सब कुछ स्मृति में हास्यास्पद तेज है भंडारण के द्वारा, बड़े डेटा सेट के लिए अच्छा है, लेकिन मुझे नहीं लगता कि यह किसी भी उन्नत भार है है। इसमें आपके स्वयं के जटिल क्वेरी फ़ंक्शन लिखने की अनुमति देने का अतिरिक्त लाभ होता है।

JSII - http://karussell.wordpress.com/2010/11/02/jsii-full-text-search-in-1k-loc-of-javascript/ यह Lucene शैली भार का उपयोग करता है और 20k पंक्तियों पर यह 50ms जो महान नहीं है, लेकिन शायद अपने डेटा के लिए काफी अच्छा है पर में आता है।

+0

ग्रेट! आपका बहुत बहुत धन्यवाद। – Kariem