2015-10-28 12 views
8

सब, मैं कुछ काम करने वाले नमूने के आधार पर Twitter typeahead और Bloodhound लागू करने की कोशिश कर रहा था, लेकिन मैं कोड नीचे नहीं समझ सकता।Bloodhound.tokenizers.obj.whitespace को समझना

datumTokenizer: Bloodhound.tokenizers.obj.whitespace('songs'), 
queryTokenizer: Bloodhound.tokenizers.whitespace, 

मूल कोड नीचे जैसा दिखता है।

var songlist = new Bloodhound({ 
       datumTokenizer: Bloodhound.tokenizers.obj.whitespace('songs'), 
       queryTokenizer: Bloodhound.tokenizers.whitespace, 
       limit: 10, 
       remote: '/api/demo/GetSongs?searchTterm=%QUERY' 

      }); 

official document सिर्फ इतना कहा:

datumTokenizer - हस्ताक्षर (गृहीत) के साथ एक समारोह है कि स्ट्रिंग टोकन की एक सरणी में एक गृहीत बदल देती है। आवश्यक है।

queryTokenizer - हस्ताक्षर (क्वेरी) वाला एक फ़ंक्शन जो को स्ट्रिंग टोकन की एक सरणी में एक क्वेरी को बदलता है। आवश्यक है।

इसका क्या अर्थ है? क्या कोई मुझे इसके बारे में और बताने में मदद कर सकता है ताकि मुझे बेहतर समझ हो?

+4

ये वास्तव में दस्तावेज़ीकृत हैं। मेरी धारणा यह है कि जब कोई उपयोगकर्ता कोई प्रश्न पूछता है, तो कहें, "कुत्ते बिल्ली", व्हाइटस्पेस क्वेरी टोकेनाइज़र सफेद जगह पर विभाजित होता है, जिसके परिणामस्वरूप '["कुत्ता", "बिल्ली"] जैसे सरणी होती है। फिर, जब परिणाम आते हैं, तो डाटाम टोकनाइज़र भी उनको विभाजित करता है। इसलिए, यदि आपके पास "कुत्तों और बिल्लियों रॉक आउट" के गीत नाम के साथ परिणाम है, तो यह एक सरणी में भी विभाजित हो जाएगा। अंत में, ब्लडहाउंड दो सरणी की तुलना करता है, और यदि क्वेरी सरणी की संपूर्णता डाटाम सरणी में है, तो यह इसे एक मैच मानती है। मैं इस पर लगभग 80% निश्चित हूं। – mlissner

उत्तर

1

यह टोकन है जो खोज या मिलान करने के लिए शब्दों या क्वेरी को विभाजित करने के लिए उपयोग किया जाता है। datumTokenizer आपके डेटा और क्वेरी को संदर्भित करता है टोकनाइज़र क्वेरी (आमतौर पर इनपुट में टाइप किया गया टेक्स्ट) का संदर्भ देता है।

यदि आपका डेटा ऑब्जेक्ट (यानी जेसन) की एक सरणी है, तो डेटाम टोकनाइज़र आपको यह निर्दिष्ट करने देता है कि आप किस ऑब्जेक्ट को खोज करना चाहते हैं। उदाहरण के लिए, यदि आप नाम और कोड फ़ील्ड पर खोज करना चाहते हैं, तो आप Bloodhound.tokenizers.obj.whitespace(['name','code']) जैसे कुछ दर्ज कर सकते हैं या एक कस्टम फ़ंक्शन प्रदान कर सकते हैं।

आपको कम से अधिक जानकारी प्राप्त कर सकते हैं: https://github.com/twitter/typeahead.js/blob/master/doc/migration/0.10.0.md#tokenization-methods-must-be-provided

4

मैं यहाँ कुछ उपयोगी जानकारी मिली:

https://github.com/twitter/typeahead.js/blob/master/doc/migration/0.10.0.md#tokenization-methods-must-be-provided

सबसे आम tokenization तरीकों खाली स्थान या गैर शब्द अक्षरों पर एक दिया स्ट्रिंग विभाजित । खोजी कुत्ता बॉक्स से बाहर उन तरीकों के लिए कार्यान्वयन प्रदान करता है:

// returns ['one', 'two', 'twenty-five'] 
    Bloodhound.tokenizers.whitespace(' one two twenty-five'); 

    // returns ['one', 'two', 'twenty', 'five'] 
    Bloodhound.tokenizers.nonword(' one two twenty-five'); 

क्वेरी tokenization के लिए, आप शायद ऊपर एक विधि का उपयोग करना चाहते हैं। डेटम टोकननाइजेशन के लिए, यह वह जगह है जहां आप कुछ और अधिक उन्नत करना चाहते हैं।

डेटाम के लिए, कभी-कभी आप टोकन को एक से अधिक संपत्ति से घिरा होना चाहते हैं। उदाहरण के लिए, यदि आप GitHub खजाने के लिए एक खोज इंजन का निर्माण कर रहे थे, यह शायद रेपो का नाम, मालिक से प्राप्त टोकन के लिए बुद्धिमान हो जाएगा, और प्राथमिक भाषा:

var repos = [ 
    { name: 'example', owner: 'John Doe', language: 'JavaScript' }, 
    { name: 'another example', owner: 'Joe Doe', language: 'Scala' } 
    ]; 

    function customTokenizer(datum) { 
    var nameTokens = Bloodhound.tokenizers.whitespace(datum.name); 
    var ownerTokens = Bloodhound.tokenizers.whitespace(datum.owner); 
    var languageTokens = Bloodhound.tokenizers.whitespace(datum.language); 

    return nameTokens.concat(ownerTokens).concat(languageTokens); 
    } 

वहाँ भी परिदृश्य हो सकता है जहाँ आप बैकएंड पर प्रदर्शन करने के लिए डेटम टोकननाइजेशन चाहते हैं। ऐसा करने का सबसे अच्छा तरीका यह है कि उन टोकनों में आपके डेटाम में एक संपत्ति जोड़ें। आप क्या हासिल करने की कोशिश कर रहे हैं पर

var sports = [ 
    { value: 'football', tokens: ['football', 'pigskin'] }, 
    { value: 'basketball', tokens: ['basketball', 'bball'] } 
    ]; 

    function customTokenizer(datum) { return datum.tokens; } 

अन्य तरीकों से आप डाटुमस tokenizing के बारे में जा सकते हैं बहुत सारे हैं, यह वास्तव में सिर्फ निर्भर करता है: फिर आप एक tokenizer कि बस पहले से ही विद्यमान टोकन रिटर्न दे सकता है।

यह दुर्भाग्यपूर्ण लगता है कि यह जानकारी मुख्य दस्तावेज़ से ढूंढना आसान नहीं था।

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