sql >> データベース >  >> NoSQL >> MongoDB

MeteorアプリでのMongoDB2.4の全文検索の実装

    Meteorコードを編集しない最も簡単な方法は、独自のmongodbを使用することです。 mongodb.conf 次のようになります(Arch Linuxでは、/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でsayを宣言

    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'));
    

    TimoBrinkmann への小道具 そのmusiccrawlerプロジェクト この知識のほとんどの源でした。



    1. 異なるフィールド数のSpringDataMongoRepository保存オブジェクト

    2. MongoDBコレクションのクエリフィールド。

    3. mongo-cxx-driverを使用してVisualStudioプロジェクト設定をセットアップするにはどうすればよいですか?

    4. C#Mongodb。配列内のアイテムを検索し、このアイテムのみを選択します