2014-03-25 164 views
3

我做一些映射到我的ES型使用此命令ElasticSearch geo_shape映射

curl -XPUT 'http://localhost:9200/lbs/road5/_mapping' -d ' 
{ 
    "properties": { 
     "location": { 
      "type": "geo_shape", 
      "tree": "quadtree", 
      "precision": "1m" 
     } 
    } 
} 

但是当我与一些源插入,我的ES提供了这样的

[2014-03-25 10:12:05,754][DEBUG][action.index    ] [Shadowcat] [lbs][4], node[Vtad6yMTQua7oOtIPaRtKg], [P], s[STARTED]: Failed to execute [index {[lbs][road5][4625611], source[{"osm_id":4625611,"osm_type":"residential","name":"sindang sirana elok","location":{"type":"linestring","coordinates":[[[107.5891297,-6.877704],[107.5891175,-6.8784478]]]}}]}] 
org.elasticsearch.index.mapper.MapperParsingException: failed to parse [location] 
    at org.elasticsearch.index.mapper.geo.GeoShapeFieldMapper.parse(GeoShapeFieldMapper.java:244) 
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeObject(ObjectMapper.java:517) 
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:459) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:515) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:462) 
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareIndex(InternalIndexShard.java:392) 
    at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:203) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:556) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:426) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.NullPointerException 
    at org.elasticsearch.common.geo.builders.BaseLineStringBuilder.decompose(BaseLineStringBuilder.java:90) 
    at org.elasticsearch.common.geo.builders.BaseLineStringBuilder.decompose(BaseLineStringBuilder.java:71) 
    at org.elasticsearch.common.geo.builders.BaseLineStringBuilder.build(BaseLineStringBuilder.java:55) 
    at org.elasticsearch.index.mapper.geo.GeoShapeFieldMapper.parse(GeoShapeFieldMapper.java:231) 
    ... 11 more 

这有什么错警告我文件来源?

{ 
    "osm_id": 4625611, 
    "osm_type": "residential", 
    "name":"sindang sirana elok", 
    "location": { 
    "type": "linestring", 
    "coordinates": [ 
     [[107.5891297, -6.877704], [107.5891175, -6.8784478]] 
    ] 
    } 
} 

回答

2

linestring已在coordinates额外的阵列级别。尝试更改为

{ 
    "osm_id": 4625611, 
    "osm_type": "residential", 
    "name":"sindang sirana elok", 
    "location": { 
    "type": "linestring", 
    "coordinates": [ 
     [107.5891297, -6.877704], [107.5891175, -6.8784478] 
    ] 
    } 
} 
+0

注意:这是为了匹配geojson标准http://geojson.org/geojson-spec.html#id3,它有助于避免转换,但也不是很有用直观的初学者 –

+0

同意。无论是谁提出了GeJSON规范,都做出了一个决定,违背了大多数人为了超级通用(好或坏)而使用经纬度数据做的事情。 – pickypg