在使用mongoosastic时更新mongodb文档时出现问题

时间:2015-11-25 19:17:08

标签: node.js mongodb elasticsearch mongoosastic

我正在使用mongoosastic将文档索引到ElasticSearch中。 save(),remove()等工作正常,但是当我更新()文档时,它没有在elasticsearch中重新编制索引。你能帮我理解如何更新mongodb文件,以便mongoosastic自动重新索引更新的文件吗?非常感谢。

以下是代码段

Product.update({"_id" : {$in : productIDs}}, {l2Category : req.body.newL2CategoryName}, {multi : true}, function(errUpdatingProducts){
        if(errUpdatingProducts)
        console.log(errUpdatingProducts);
});   

在产品架构中,l2ategory被索引为String

l2Category: {
    type: String,
    es_indexed: true,
    es_type: 'string'
},

一种方法是使用find()从mongodb服务器将数据加载到客户端,并在客户端更新每个文档,然后使用save()将其保存回服务器。但它似乎并不是最聪明的方式。

1 个答案:

答案 0 :(得分:0)

像这样创建映射: 的

ProductSchema.plugin(mongoosastic);
Product = module.exports = mongoose.model('Product', ProductSchema);
Product.createMapping({ 
     "settings": {
     "number_of_shards": 1,
     "number_of_replicas": 0,
     "analysis": {
         "analyzer": {
             "autocomplete": {
                 "type": "custom",
                 "tokenizer": "standard",
                 "filter": ["standard", "lowercase", "stop", "kstem", "ngram"]
             }
         },
         "filter": {
             "ngram": {
                 "type": "ngram",
                 "min_gram": 2,
                 "max_gram": 15
             }
         }
     }
 },
 "mappings": {
     "Product": {
         "properties": {
              "yourschemaobject":...

         }
     }
 }
}, function(err, mapping) {
    if (err) {
        console.log('error creating mapping (you can safely ignore this)');
        console.log(err);
    } else {
        console.log('mapping created!');
        console.log(mapping);
    }
});

在你的映射创建对象,就像我的例子。 http://jsfiddle.net/kevalbhatt18/mt652L3m/1/

完成映射后,尝试使用此示例进行保存并更新https://stackoverflow.com/a/33992421/4696809