2016-01-08 67 views
0

我的架構看起來像這樣的mongooseMongoosastic地理空間架構映射

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: 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' 
    } 

編輯

OP發佈此解決方案。 更改:

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

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

我仍然得到同樣的錯誤。 – gmaniac

+0

這麼長時間後再看這個我想我知道現在是什麼。我不認爲''mongoosastic''喜歡'geo:{type:{type:String,......},coordinates:[{type:Number,.....}]}'我認爲這是類型和具有類型。 – gmaniac

+0

就是這樣,如果我將'geo:{type:{type:String,......},座標:[{type:Number,.....}]}'改爲'geo:{point_type :{type:String,......},座標:[{type:Number,.....}]}'沒問題 – gmaniac