किसी भी उल्का कोड को संपादित किए बिना सबसे आसान तरीका है कि आप अपने स्वयं के मोंगोडब का उपयोग करें। आपका 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 प्रोजेक्ट अधिकांश इस ज्ञान का स्रोत था।