2016-01-08 4 views
0

Моя схема выглядит следующим образом для mongoose:Mongoosastic геопространственной схема картограф

var LocationSchema = new Schema({ 
    id:   ObjectId, 
    geo:   { 
     type: { 
      type: String, 
      required: true, 
      enum: ['Point', 'LineString', 'Polygon'], 
      default: 'Point' 
     }, 
     coordinates: [{ 
      type: Number, 
      es_lat_lon: true, 
      es_type: 'geo_point' 
     }] 
    } 
}); 

Затем я добавляю mongoosastic плагин mongoose начать модель и создать отображения для mongoosastic

var esClient = new elasticsearch.Client({ 
    host: config.es_url, 
    requestTimeout: Infinity, 
    keepAlive: true 
}); 
LocationSchema.plugin(mongoosastic, { esClient: esClient }) 

var Location = mongoose.model('Location', LocationSchema); 

/** 
* mongoosastic create mappings 
*/ 
Location.createMapping(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); 
    } 
}); 

Теперь я получаю это error [Error: MapperParsingException[No handler for type [{default=Point, enum=[Point, LineString, Polygon], required=true, type=string}] declared on field [geo]]]

Полная ошибка в журнале:

{ 
    [Error: MapperParsingException[No handler for type [{default=Point, enum=[Point, LineString, Polygon], required=true, type=string}] declared on field [geo]]] 
    status: '400', 
    displayName: 'BadRequest', 
    message: 'MapperParsingException[No handler for type [{default=Point, enum=[Point, LineString, Polygon], required=true, type=string}] declared on field [geo]]' 
} 

Мой вопрос: я делаю это совершенно неправильно или я просто пропустил что-то маленькое? То, как я делаю это, работает для mongoose, только у mongoosastic возникает проблема, и я понимаю, почему, но я не могу быть первым, кто столкнулся с этим (причина, по которой mongoosastic испытывает проблемы, видит type и не ожидает, что она будет иметь тип - по крайней мере, это то, что, по моему мнению, вызывает проблемы).

ответ

1

Вместо

coordinates: [{ 
     type: Number, 
     es_lat_lon: true, 
     es_type: 'geo_point' 
    }] 

Попробуйте

coordinates: { 
     type: [Number], 
     es_type: 'geo_point' 
    } 

EDIT:

ОП Опубликовано это решение. Изменено:

geo: { 
    type: { 
     type: String, ...... 
    }, 
    coordinates: [ 
     { type: Number,  ..... } 
    ] 
} 

Для

geo: { 
    point_type: { 
     type: String, ...... 
    }, 
    coordinates: [ 
     { type: Number, ..... } 
    ] 
} 
+0

я все еще получаю ту же ошибку. – gmaniac

+0

глядя на это снова после столь долгого времени, я думаю, что знаю, что это такое. Я не думаю, что 'mongoosastic' любит' geo: {type: {type: String, ......}, координаты: [{type: Number, .....}]} 'Я думаю, что это типа и с типом. – gmaniac

+0

, если бы я изменил 'geo: {type: {type: String, ......}, координаты: [{type: Number, .....}]}' to 'geo: {point_type : {type: String, ......}, координаты: [{type: Number, .....}]} 'у него нет проблем – gmaniac

Смежные вопросы