MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

एक उल्का ऐप में MongoDB 2.4 की पूर्ण पाठ खोज को कार्यान्वित करना

किसी भी उल्का कोड को संपादित किए बिना सबसे आसान तरीका है कि आप अपने स्वयं के मोंगोडब का उपयोग करें। आपका mongodb.conf कुछ इस तरह दिखना चाहिए (आर्क लिनक्स पर यह /etc/mongodb.conf पर पाया जाता है। )

bind_ip = 127.0.0.1
quiet = true
dbpath = /var/lib/mongodb
logpath = /var/log/mongodb/mongod.log
logappend = true
setParameter = textSearchEnabled=true

मुख्य पंक्ति है setParameter = textSearchEnabled=true , जो, जैसा कि यह बताता है, पाठ खोज को सक्षम बनाता है।

प्रारंभ करें mongod ऊपर

उल्का को अपने mongod . का उपयोग करने के लिए कहें MONGO_URL . निर्दिष्ट करके अपना नहीं पर्यावरण चर।

MONGO_URL="mongodb://localhost:27017/meteor" meteor

अब मान लें कि आपके पास Dinosaurs नाम का संग्रह है collections/dinosaurs.js में घोषित घोषित

Dinosaurs = new Meteor.Collection('dinosaurs');

संग्रह के लिए एक टेक्स्ट इंडेक्स बनाने के लिए एक फ़ाइल बनाएं server/indexes.js

Meteor.startUp(function () {
    search_index_name = 'whatever_you_want_to_call_it_less_than_128_characters'

    // Remove old indexes as you can only have one text index and if you add 
    // more fields to your index then you will need to recreate it.
    Dinosaurs._dropIndex(search_index_name);

    Dinosaurs._ensureIndex({
        species: 'text',
        favouriteFood: 'text'
    }, {
        name: search_index_name
    });
});

फिर आप Meteor.method . के माध्यम से खोज को उजागर कर सकते हैं , उदाहरण के लिए फ़ाइल में server/lib/search_dinosaurs.js

// Actual text search function
_searchDinosaurs = function (searchText) {
    var Future = Npm.require('fibers/future');
    var future = new Future();
    Meteor._RemoteCollectionDriver.mongo.db.executeDbCommand({
        text: 'dinosaurs',
        search: searchText,
        project: {
          id: 1 // Only take the ids
        }
     }
     , function(error, results) {
        if (results && results.documents[0].ok === 1) {
            future.ret(results.documents[0].results);
        }
        else {
            future.ret('');
        }
    });
    return future.wait();
};

// Helper that extracts the ids from the search results
searchDinosaurs = function (searchText) {
    if (searchText && searchText !== '') {
        var searchResults = _searchEnquiries(searchText);
        var ids = [];
        for (var i = 0; i < searchResults.length; i++) {
            ids.push(searchResults[i].obj._id);
        }
        return ids;
    }
};

फिर आप केवल उन्हीं दस्तावेज़ों को प्रकाशित कर सकते हैं जिन्हें 'server/publications.js' में खोजा गया है

Meteor.publish('dinosaurs', function(searchText) {
    var doc = {};
    var dinosaurIds = searchDinosaurs(searchText);
    if (dinosaurIds) {
        doc._id = {
            $in: dinosaurIds
        };
    }
    return Dinosaurs.find(doc);
});

और क्लाइंट साइड सब्सक्रिप्शन client/main.js . में कुछ इस तरह दिखेगा

Meteor.subscribe('dinosaurs', Session.get('searchQuery'));

टिमो ब्रिंकमैन के लिए सहारा जिसका musiccrawler प्रोजेक्ट अधिकांश इस ज्ञान का स्रोत था।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB का उपयोग करके किसी फ़ील्ड में मानों की संख्या सीमित करें

  2. लोचदार बीनस्टॉक पर mongoDB के साथ Node.Js ऐप को तैनात करते समय मुझे एक त्रुटि मिल रही है

  3. mongodb क्लाउड में प्रदर्शन और मोंगो होस्टिंग पढ़ें/लिखें

  4. भू-स्थानिक अनुक्रमण YAML के साथ फ़ील्ड के लिए कोई मानचित्रण नहीं मिला

  5. डीएओ और निर्भरता इंजेक्शन, सलाह?