Вопрос

Я пытаюсь выполнить полный текстовый поиск на mongodb и node.js, используя плагин для поиска монгуз-текста. Я следую примеру кода из https://github.com/aheckmann/mongoose-text-search и мой код показан ниже. Я продолжаю получать ошибку, указывающая: «Ошибка: текстовый поиск не включен. Неопределенный». Я следовал указаниям от Установка плагинов для Mongoose - Получение ошибки, что привело меня к сайту MongoDB: http://docs.mongodb.org/manual/tutorial/enable-text-searchАнкет Однако после того, как я включил текстовый поиск, набрав команду:

Mongod -SetParameter TextSearchenabled = true

В терминале я запускаю свое приложение и сталкиваюсь с дополнительной ошибкой. В нем говорится: «Mongoerror: E11000 Дубликат Индекс ошибок ключа: meddb.tweets. $ Id_1 DUP Ключ: {: null} Это ошибка: ошибка: текстовый поиск не включен Неопределенным»

Если кто -то из вас столкнулся с этой ошибкой и нашел способ обойти ее, пожалуйста, дайте мне знать, что мне не хватает или нужно изменить.

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');
};
Это было полезно?

Решение

А mongoose-text-search плагин работает для меня. Мне пришлось установить textSearchEnabled к true. Анкет Я не пробовал это как параметр для запуска, но это сработало после того, как мой экземпляр Mongod уже работал:

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

Кроме того, вы действительно можете рассмотреть возможность использования Elasticsearch вместо FTS Mongo. Решение Mongo FTS не готово производство (Смотрите предупреждение) У меня также есть ограниченный опыт работы с Elasticsearch, но я нашел его очень впечатляющим.

Если вы решите пойти по маршруту Elasticsearch и все еще хотите использовать Mongo, есть несколько приличных вариантов:

  • А река, который требует включения Реплика наборТаким образом, река может контролировать Oplog (см. вики)
  • Монгусастичный, который хорошо подключается к Mongoose для запроса и поддерживает ES в синхронизации с Mongo, написав как в Mongo, так и в ES.

ОбновлятьПоскольку 2.6 Mongo имеет текстовый поиск по умолчанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top