Frage

Ich versuche mithilfe des Mongoose-Text-Search-Plugins eine vollständige Textsuche auf MongoDB und Node.js durchzuführen. Ich folge dem Beispielcode von https://github.com/aheckmann/mongoose-text-search Und mein Code ist unten angezeigt. Ich erhalte immer wieder einen Fehler, der besagt: "Fehler: Textsuche nicht aktiviert. Undefiniert" Ich folgte den Anweisungen aus Installieren von Plugins für Mongoose - Fehler erhalten, was mich zur MongoDB -Site führte: http://docs.mongodb.org/manual/tutorial/enable-text-search. Nachdem ich die Textsuche aktiviert habe, indem ich den Befehl eingreift:

mongod -setparameter textsearchEnabled = true

In Terminal starte ich meine Anwendung und begegne einen zusätzlichen Fehler. Es heißt: "MongoError: E11000 Duplicate Key Error Index: meddb.tweets.

Wenn einer von Ihnen auf diesen Fehler gestoßen ist und einen Weg gefunden hat, lassen Sie mich bitte wissen, was mir fehlt oder sich ändern muss.

var mongoose = require('mongoose');
var textSearch = require('mongoose-text-search');
var Schema = mongoose.Schema;
var twitterSchema = new Schema ({
        id: {type: Number, index: {unique: true, dropDups: true}},
        created_at: Date,
        user: [{
                id: Number,
                name: String,
                screen_name: String,
                location: String
        }],
        text: String,
        keywords: []
});

twitterSchema.plugin(textSearch);

twitterSchema.index({keywords: 'text' });

var Tweets = mongoose.model('Tweets', twitterSchema);

Tweets.create({text: 'flu', keywords: ['disease', 'doctor', 'shots']}, function(err){
    if(err){
        console.log('First error: ' + err);
    }

    Tweets.textSearch('shots', function(err, output){
        if(err){
            console.log('This is error: ' + err)
        }

        var inspect = require('util').inspect;
        console.log(inspect(output, {depth: null}));

   });
});

exports.Document = function(db) {
  return db.model('Tweets');
};
War es hilfreich?

Lösung

Das mongoose-text-search Plugin arbeitet für mich. Ich musste setzen textSearchEnabled zu true. Ich habe es nicht als Parameter beim Start versucht, aber dies funktionierte, als meine Mongod -Instanz bereits ausgeführt wurde:

use admin
db.runCommand({'setParameter':1,"textSearchEnabled":true})
use <my db>
<my db>.<my colleciton>.ensureIndex({"$**":"text"}) //Beware! "$**" indexes the entire document

Außerdem möchten Sie auch in Betracht ziehen, Elasticsearch anstelle von Mongos FTS zu verwenden. Die FTS -Lösung von Mongo ist nicht produktionsbereit (Siehe die Warnung). Ich habe auch nur begrenzte Erfahrung mit Elasticsearch, fand es aber sehr beeindruckend.

Wenn Sie sich für die Elasticsearch -Route entscheiden und immer noch Mongo verwenden möchten, gibt es einige anständige Optionen:

  • EIN Fluss, was eingeschaltet werden muss Replikate -SetSo kann der Fluss den OPLlog überwachen (siehe die Wiki)
  • Mongoosastik, die gut an Mongoose angeschlossen werden, um abfragen zu können, und hält ESS synchron mit Mongo, indem sie sowohl an Mongo als auch auf ES schreibt.

AktualisierenDa 2.6 mongo standardmäßig die Textsuche aktiviert hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top