MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Menerapkan pencarian teks lengkap MongoDB 2.4 di aplikasi Meteor

Cara paling sederhana tanpa mengedit kode Meteor apa pun adalah dengan menggunakan mongodb Anda sendiri. mongodb.conf . Anda akan terlihat seperti ini (di Arch Linux dapat ditemukan di /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

Baris kuncinya adalah setParameter = textSearchEnabled=true , yang, sebagaimana dinyatakan, memungkinkan pencarian teks.

Mulai mongod naik

Beri tahu meteor untuk menggunakan mongod bukan miliknya dengan menentukan MONGO_URL variabel lingkungan.

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

Sekarang katakanlah Anda memiliki koleksi yang disebut Dinosaurs dinyatakan katakan di collections/dinosaurs.js

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

Untuk membuat indeks teks untuk koleksi, buat file 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
    });
});

Kemudian Anda dapat mengekspos pencarian melalui Meteor.method , misalnya dalam file 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;
    }
};

Kemudian Anda hanya dapat mempublikasikan dokumen yang telah dicari di 'server/publications.js'

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

Dan langganan sisi klien akan terlihat seperti ini di client/main.js

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

Alat peraga untuk Timo Brinkmann yang proyek musik adalah sumber sebagian besar pengetahuan ini.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Permintaan mongo memakan waktu lama. Bagaimana membuatnya lebih cepat?

  2. Bagaimana cara melakukan kueri agregasi Mongo di Spring Data?

  3. Tidak dapat menghapus dari kumpulan mongodb angular MEAN stack

  4. Mongo $addToSet dengan beberapa nilai sintaks yang benar

  5. Cari dengan array Objek