Orang ingin mencari konten. Pencarian yang baik sangat penting .
Pencarian teks lengkap. Menggunakan Perintah Asli MongoDB.
Contoh aplikasi:
Secara default, Meteor memulai instance MongoDB-nya sendiri, ini tidak memiliki pengindeksan/pencarian teks lengkap, jadi Anda harus menggunakan yang asli .
Jika Anda belum memiliki instalasi MongoDB "Nyata" di sistem Anda, instal dengan HomeBrew :
brew update
brew install mongodb
Jika Anda tidak menggunakan Mac ...
Di jendela terminal/konsol, mulai database mongod Anda dengan perintah berikut:
mongod --dbpath ~/code/meteor-search/.meteor/local/db --setParameter textSearchEnabled=true
Catatan :
Konfirmasikan fungsinya dengan mengunjungi: http://localhost:28017/ (di browser Anda)
Info lebih lanjut tentang mengaktifkan pencarian teks: http://docs.mongodb.org/manual/tutorial/enable-text-search/
Karena kita menggunakan Mongo "asli", kita perlu menentukannya saat memulai meteor. (Ini hanya berlaku saat Anda mengembangkan produksi, Anda akan menetapkan ENV
)
MONGO_URL="mongodb://localhost:27017/meteor" meteor
Jika aplikasi dimulai dengan baik, permainannya aktif !
(jika tidak, kirimkan bug ke repo ini dan saya akan mencoba membantu Anda!)
Saat Anda mem-boot aplikasi ini, aplikasi ini akan mengakses API Streaming Twitter dan mengambil ribuan tweet untuk Anda cari ( secara lokal ). (biarkan berjalan selama beberapa menit dan Anda akan mendapatkan 10 ribu postingan. Atau beberapa jam jika Anda ingin ratusan ribu untuk melakukan stress test pencarian)
Jika Anda ingin BANYAK konten dengan sangat cepat, ubah KATA KUNCI menjadi berita .
Jika Anda ingin jumlah data ( berisik ) yang GILA (untuk menyimulasikan volume tinggi ), gunakan:
var KEYWORDS = "katie, justin, kim, beyonce, miley, Obama, 1DWorld, OMG, FML, breaking, news";
Setelah Anda memiliki beberapa konten, Anda perlu memastikan bahwa MongoDB mengindeksnya.
Untungnya ini cukup mudah dengan metode sureIndex MongoDB. Dalam kasus kami, kami hanya akan mengindeks bidang isi postingan:
db.posts.ensureIndex( { body: "text" },{ background:true } );
Ada skrip startup yang melakukan ini secara otomatis untuk Anda di: server/indexes.js
Tergantung pada berapa banyak data yang telah Anda masukkan, ini mungkin memerlukan waktu... Saya memiliki 92 ribu posting (tweet) di DB saya ketika saya menjalankannya dan itu membutuhkan waktu kurang dari 10 detik!
Lebih detail tentang sureIndex :
db.posts.runCommand( "text", { search: "paypal" } )
Meskipun ini berfungsi dengan baik di RoboMongo:
Meteor tidak mendukung metode runCommand :
Jadi ...
http://stackoverflow.com/questions/17159626/implementing-mongodb-2-4s-full-text-search-in-a-meteor-app/18258688#18258688
Saya menulis ekspresi reguler sederhana untuk mengubah kata kunci yang diberi hashtag menjadi tautan. Daripada mencemari data mentah dengan tautan (dan membuat catatan kami membengkak), Kami menemukan/mengganti #kata kunci pada waktu render (sisi klien) menggunakan metode pembantu templat Setang:
// 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;
});
Catatan : pola tautan dikodekan secara keras /search/:keywords
dan metodenya tidak dapat dirantai sejauh ini dari sempurna ! Kirim permintaan tarik jika Anda memperbaikinya. :-)
MongoHQ tidak mengaktifkan pengindeksan teks (lengkap) secara default .
Namun mereka dengan cepat membantu saya ketika saya memintanya: https://twitter.com/nelsonic/statuses/451758108285489152
Anda perlu mengatur indeks Anda secara manual dengan sebuah perintah
(baik di Klien Mongo Anda - Kami menggunakan RoboMongo - atau Antarmuka Web)
Setelah itu diatur, Anda siap melakukannya.
Di RoboMongo (atau Klien MongoDB pilihan Anda) gunakan perintah berikut untuk mencari koleksi Anda (pada bidang yang Anda tentukan sebagai dapat dicari)
db.COLLECTION.runCommand( "text", { search: "KEYWORDS" } );
// e.g:
db.posts.runCommand( "text", { search: "learn" } );
Hasil pencarian ditampilkan dalam 0,15 detik ketika saya memiliki 327 ribu postingan di koleksi:
Proyek ini menggunakan Iron Router untuk perutean url.
Jika Anda belum familiar dengannya (Anda harus mengetahuinya jika Anda serius ingin menggunakan Meteor), baca:
mrt add iron-router
Lihat file rute.js untuk detail lebih lanjut tentang bagaimana saya menghubungkannya untuk menerima permintaan dalam bentuk: http://yoursite.com/search/:keywords