ElasticSearch上的mapper_parsing_exception错误

时间:2018-06-24 12:35:13

标签: node.js elasticsearch mongoose backend

服务器在端口3000上启动。

  

创建映射时出错[mapper_parsing_exception]没有用于类型的处理程序   在字段[类别]上声明的[string] ::   {“路径”:“ /产品/ _映射/产品”,“查询”:{},“正文”:“ {\”产品\“:{\”属性\“:{\”类别\“:{\” type \“:\” string \“},\” name \“:{\” type \“:\” string \“},\” price \“:{\” type \“:\” double \“} ,\“ image \”:{\“ type \”:\“ string \”}}}}“,” statusCode“:400,” response“:” {\“ error \”:{\“ root_cause \”: [{\“ type \”:\“ mapper_parsing_exception \”,\“原因\”:\“否   在字段上声明的类型[string]的处理程序   [类别] \“}],\”类型\“:\” mapper_parsing_exception \“,\”原因\“:\”否   在字段上声明的类型[string]的处理程序   [类别] \“},\”状态\“:400}”}

已连接到数据库

索引120个文档

//代码

Product.createMapping(function(err, mapping){
if(err){
    console.log("Error creating mapping"+ err);
}else{
    console.log("Mapping Cretaed");
    console.log(mapping);
}
});

var stream = Product.synchronize();
var count = 0;

stream.on('data', function(){
    count++;
});
stream.on('close', function(){
    console.log("Indexed " + count + "documents");
});
stream.on('error', function(err){
    console.log(err);
});

添加了新代码以说明什么是产品

var mongoose = require("mongoose");
var Schema   = mongoose.Schema;
var mongoosastic = require("mongoosastic");

//Schema
var ProductSchema = new Schema({
    category : {
        type : Schema.Types.ObjectId,
        ref : 'Category'
    },
    name : String,
    price : Number,
    image : String 
});
ProductSchema.plugin(mongoosastic, {
    hosts : [
    'localhost:9200'
    ]
})

module.exports = mongoose.model('Product', ProductSchema);

1 个答案:

答案 0 :(得分:0)

在您要创建的映射中,您拥有类型string,该类型在ES 5.x中已弃用。您需要改用textkeyword

您的映射应该看起来像这样:

{
  "product": {
    "properties": {
      "category": {
        "type": "keyword"
      },
      "name": {
        "type": "text"
      },
      "price": {
        "type": "double"
      },
      "image": {
        "type": "text"
      }
    }
  }
}

更新

问题出在以下事实:截至{2018年6月26日,mongoosastic 4.4.1 doesn't support ES5。一种解决方法是像这样修改您的mongo模式

category: { 
  type: String,
  es_type: 'keyword'
}
price: { 
  type: Number,
  es_type: 'double'
}
name: { 
  type: String,
  es_type: 'text'
}
image: { 
  type: String,
  es_type: 'text'
}