سؤال

أحاول إجراء البحث عن نص كامل على MongoDB و Node.js باستخدام المكون الإضافي Mongoose-Text-Search. أنا أتابع رمز المثال من https://github.com/aheckmann/mongoose-text-search ويظهر الكود الخاص بي أدناه. ما زلت أحصل على خطأ يوضح: "خطأ: البحث النص غير ممكّن. تثبيت الإضافات لـ Mongoose - الحصول على خطأ, ، الأمر الذي قادني إلى موقع Mongodb: http://docs.mongodb.org/manual/tutorial/enable-text-search. ومع ذلك ، بعد تمكين البحث عن النص عن طريق كتابة الأمر:

mongod -setparameter textsearchenabled = true

في Terminal ، أبدأ طلبي وأواجه خطأً إضافيًا. ينص على: "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. حل FTS من Mongo ليس الإنتاج جاهز (انظر التحذير). لدي أيضًا خبرة محدودة مع Elasticsearch لكن وجدت أنها رائعة للغاية.

إذا اخترت الذهاب إلى مسار Elasticsearch وما زلت ترغب في استخدام Mongo ، فهناك بعض الخيارات اللائقة:

  • أ نهر, الذي يتطلب تشغيل مجموعة النسخة المتماثلةحتى يتمكن النهر من مراقبة Oplog (انظر ويكي)
  • mongoosastic, ، الذي يتوصيل بشكل جيد إلى mongoose للاستعلام والحفاظ على متزامن مع Mongo من خلال الكتابة إلى كل من Mongo و ES.

تحديثمنذ 2.6 لدى Mongo ، تم تمكين البحث عن النص بشكل افتراضي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top