Pregunta

Estoy tratando de realizar la búsqueda de texto completo en MongoDB y Node.js usando el complemento de búsqueda de texto Mongoose. Estoy siguiendo el código de ejemplo de https://github.com/aheckmann/mongoose-text-search y mi código se muestra a continuación. Sigo recibiendo un error indicando: "Error: búsqueda de texto no habilitada. Undefinado" Seguí las instrucciones desde Instalación de complementos para mangosta: recibiendo un error, que me llevó al sitio de MongoDB: http://docs.mongodb.org/manual/tutorial/enable-text-search. Sin embargo, después de habilitar la búsqueda de texto escribiendo el comando:

MongoD --SetParameter TextSearchEnabled = True

En Terminal, comienzo mi aplicación y encuentro un error adicional. Dice: "MongoError: E11000 Índice de error de clave duplicada: Meddb.tweets. $ Id_1 clave dup: {: null} Esto es error: error: búsqueda de texto no habilitado indefinido"

Si alguno de ustedes ha encontrado este error y ha encontrado una forma de evitarlo, hágame saber lo que me falta o necesito cambiar.

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');
};
¿Fue útil?

Solución

los mongoose-text-search El complemento está funcionando para mí. Tuve que configurar textSearchEnabled a true. No lo probé como un parámetro en el inicio, pero esto funcionó una vez que mi instancia de MongoD ya se estaba ejecutando:

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

Además, es posible que desee considerar usar Elasticsearch en lugar de los FT de Mongo. La solución FTS de Mongo es no producción lista (ver la advertencia). También tengo una experiencia limitada con Elasticsearch, pero me pareció muy impresionante.

Si elige seguir la ruta Elasticsearch y aún desea usar Mongo, hay algunas opciones decentes:

  • A río, que requiere encender conjunto de réplicapara que el río pueda monitorear el Oplog (ver el wiki)
  • Mongoosástico, que se conecta muy bien a Mongoose para consultar y mantiene ES en sincronización con Mongo escribiendo a Mongo y ES.

ActualizarDado que 2.6 Mongo tiene la búsqueda de texto habilitada de forma predeterminada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top