Ошибка в mapper_parsing_exception в ElasticSearch - PullRequest
0 голосов
/ 24 июня 2018

Сервер запущен на порту 3000.

Ошибка при создании сопоставления [mapper_parsing_exception] Нет обработчика для типа [string], объявленного в поле [category] :: {"path": "/ products /_mapping / продукт " "запрос": {}, "тело": "{\" продукт \ ": {\" свойства \ ": {\" категории \ ": {\" типа \ ": \" строка \"}, \ "имя \": {\ "типа \": \ "строка \"}, \ "цена \": {\ "типа \": \ "двойной \"}, \ "образа \": {\"Тип \": \ "строка \"}}}} " "StatusCode": 400, "ответ": "{\" ошибка \ ": {\" ROOT_CAUSE \ ": [{\" Тип \": \"mapper_parsing_exception \", \ "reason \": \ "Не указан обработчик для типа [string], объявленного в поле [category] \"}], \ "type \": \ "mapper_parsing_exception \", \ "reason \": \"Не определен обработчик для типа [строка] в поле [категория] \"}, \ "status \": 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 голосов
/ 25 июня 2018

В отображении, которое вы пытаетесь создать, у вас есть тип string, который устарел в ES 5.x. Вам нужно использовать text или keyword вместо.

Ваше отображение должно выглядеть следующим образом:

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

UPDATE

Проблема связана с тем, что по состоянию на 26 июня 2018 года mongoosastic 4.4.1 не поддерживает ES5 . Один из обходных путей - изменить вашу схему монго, как это

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