الناس يريدون العثور على المحتوى. البحث الجيد ضروري .
البحث عن النص الكامل. استخدام أوامر MongoDB الأصلية .
التطبيق المثال:
افتراضيًا، يبدأ Meteor مثيله الخاص من MongoDB، ولا يحتوي هذا على فهرسة/بحث للنص الكامل، لذلك تحتاج إلى الانتقال إلى ملف .
إذا لم يكن لديك بالفعل تثبيت "حقيقي" لـ MongoDB على نظامك، فقم بتثبيته باستخدام HomeBrew :
brew update
brew install mongodb
إذا كنت لا تستخدم ماك...
في نافذة الوحدة الطرفية/وحدة التحكم، قم بتشغيل قاعدة بيانات mongod باستخدام الأمر التالي:
mongod --dbpath ~/code/meteor-search/.meteor/local/db --setParameter textSearchEnabled=true
ملحوظات :
تأكد من عمله بزيارة: http://localhost:28017/ (في متصفحك)
مزيد من المعلومات حول تمكين البحث عن النص: http://docs.mongodb.org/manual/tutorial/enable-text-search/
لأننا نستخدم Mongo "الحقيقي" نحتاج إلى تحديده عند بدء تشغيل النيزك. (ينطبق هذا فقط أثناء قيامك بالتطوير في الإنتاج، حيث يمكنك تعيين ENV
)
MONGO_URL="mongodb://localhost:27017/meteor" meteor
إذا بدأ التطبيق بشكل جيد، فستكون اللعبة قيد التشغيل !
(وإلا أرسل خطأ إلى هذا الريبو وسأحاول مساعدتك!)
عند تشغيل هذا التطبيق، فإنه سيصل إلى Twitter Streaming API ويجلب آلاف التغريدات لتتمكن من البحث فيها ( محليًا ). (اتركه قيد التشغيل لبضع دقائق وستحصل على 10 آلاف مشاركة. أو بضع ساعات إذا كنت تريد مئات الآلاف من الضغط على اختبار البحث)
إذا كنت تريد الكثير من المحتوى بسرعة كبيرة، فقم بتغيير KEYWORD إلى news .
إذا كنت تريد كميات هائلة من البيانات ( الصاخبة ) (لمحاكاة الحجم الكبير )، فاستخدم:
var KEYWORDS = "katie, justin, kim, beyonce, miley, Obama, 1DWorld, OMG, FML, breaking, news";
بمجرد حصولك على بعض المحتوى، ستحتاج إلى التأكد من قيام MongoDB بفهرسته.
لحسن الحظ، يعد هذا أمرًا سهلاً للغاية باستخدام طريقة ضمان الفهرسة الخاصة بـ MongoDB. في حالتنا، سنقوم ببساطة بفهرسة الحقل الأساسي للمنشور:
db.posts.ensureIndex( { body: "text" },{ background:true } );
يوجد برنامج نصي لبدء التشغيل يقوم بذلك تلقائيًا نيابةً عنك على: server/indexes.js
اعتمادًا على كمية البيانات التي أدخلتها بالفعل، قد يستغرق هذا بعض الوقت... كان لدي 92 ألف مشاركة (تغريدات) في قاعدة البيانات الخاصة بي عندما قمت بتشغيلها واستغرق الأمر أقل من 10 ثوانٍ!
مزيد من التفاصيل حول مؤشر الضمان :
db.posts.runCommand( "text", { search: "paypal" } )
بينما يعمل هذا بشكل جيد في RoboMongo:
النيزك لا يدعم طريقة runCommand :
لذا ...
http://stackoverflow.com/questions/17159626/implementing-mongodb-2-4s-full-text-search-in-a-meteor-app/18258688#18258688
لقد كتبت تعبيرًا عاديًا بسيطًا لتحويل الكلمات الرئيسية ذات الهاشتاج إلى روابط. بدلاً من تلويث البيانات الأولية بالروابط (وتضخيم سجلاتنا) نجد/نستبدل #الكلمات الرئيسية في وقت العرض (من جانب العميل) باستخدام طريقة مساعد قالب Handlebars:
// place this code in your main.js or inside an Meteor.isClient block
Handlebars.registerHelper('highlight', function(text) {
var hashtagPattern = /s*(#w*)/gi,
link = "/search/",
m, match, matches = [], t, url ='';
// initial check for hashtag in text
if(text.indexOf("#") !== -1) {
// find all #keywords (that have hashtags)
while ( (match = hashtagPattern.exec(text)) ) {
matches.push(match[0]);
}
// replace any #keywords with <a href="/search/keywords">#keywords</a>
for(var j=0; j < matches.length; j++) {
m = matches[j].replace(/s/g, "");
// console.log('match',m);
url = link+m;
url = url.replace('#',"").toLowerCase(); // remove hashtag for lookup
t = " <a class='hashtag' href='"+url+"'>"+m+"</a> "; // replace with
replace = new RegExp("\s*("+m+")", 'gi');
text = text.replace(replace, t);
}
}
return text;
});
ملاحظة : نمط الارتباط مشفر بشكل ثابت /search/:keywords
والطريقة غير قابلة للتسلسل حتى الآن عن الكمال ! أرسل طلب سحب إذا قمت بتحسينه. :-)
لا يتم تمكين فهرسة النص (الكامل) افتراضيًا في MongoHQ.
لكنهم سارعوا بمساعدتي عندما طلبت ذلك: https://twitter.com/nelsonic/statuses/451758108285489152
ستحتاج إلى إعداد الفهارس الخاصة بك يدويًا باستخدام أمر
(إما في عميل Mongo الخاص بك - نستخدم RoboMongo - أو واجهة الويب)
بمجرد إعداد ذلك، فأنت على ما يرام.
في RoboMongo (أو أي عميل MongoDB من اختيارك) استخدم الأمر التالي للبحث في مجموعتك (في الحقل (الحقول) التي حددتها على أنها قابلة للبحث)
db.COLLECTION.runCommand( "text", { search: "KEYWORDS" } );
// e.g:
db.posts.runCommand( "text", { search: "learn" } );
تم إرجاع نتائج البحث خلال 0.15 ثانية عندما كان لدي 327 ألف مشاركة في المجموعة:
يستخدم هذا المشروع جهاز التوجيه الحديدي لتوجيه عنوان url.
إذا لم تكن على دراية به ( يجب أن تكون كذلك إذا كنت جادًا بشأن استخدام Meteor)، فاقرأ:
mrt add iron-router
راجع ملف Routes.js لمزيد من التفاصيل حول كيفية توصيل هذا لقبول الطلب في النموذج: http://yoursite.com/search/:keywords