2012-12-20 59 views
3

我有一個JSON文檔。當我嘗試在彈性搜索中進行索引時,我收到一個異常。在elasticsearch中索引文檔的異常

index1沒有默認映射。

curl -XPOST localhost:9200/index1/talk?pretty=1 -d ' 
{ 
    "_id" : ObjectId("503b29efe4b032e338f0581b"), 
    "_oid" : NumberLong(1182053), 
    "_ugc" : false, 
    "_v" : 22, 
    "c" : [ 
     "Destination" 
    ], 
    "cc" : "AD", 
    "co" : "andorra", 
    "e" : true, 
    "f" : [ 
     "Destination" 
    ], 
    "gi" : "3038999", 
    "h" : 0, 
    "i" : [ ], 
    "k" : [ 
     "soldeu", 
     "parroquia de canillo" 
    ], 
    "kv" : [ 
     "soldeu" 
    ], 
    "la" : 42.57688, 
    "lc" : 0, 
    "ln" : 1.66769, 
    "ns" : [ 
     { 
      "n" : "Soldeu", 
      "l" : "en", 
      "t" : "p" 
     } 
    ], 
    "po" : 0, 
    "point" : [ 
     42.57688, 
     1.66769 
    ] 
}' 

堆棧跟蹤:

org.elasticsearch.index.mapper.MapperParsingException: Failed to parse 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:509) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:438) 
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:287) 
    at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:210) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:532) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:430) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: org.elasticsearch.common.jackson.core.JsonParseException: Unexpected character ('O' (code 79)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [[email protected]; line: 4, column: 10] 
    at org.elasticsearch.common.jackson.core.JsonParser._constructError(JsonParser.java:1284) 
    at org.elasticsearch.common.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:588) 
    at org.elasticsearch.common.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:509) 
    at org.elasticsearch.common.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2094) 
    at org.elasticsearch.common.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:561) 
    at org.elasticsearch.common.xcontent.json.JsonXContentParser.nextToken(JsonXContentParser.java:48) 
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:461) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:494) 
    ... 8 more 

的JSON是從mongodb的一個文件。我已經安裝了以下插件:

ES_HOME/bin/plugin -install elasticsearch/elasticsearch-mapper-attachments/1.4.0 
ES_HOME/bin/plugin -install richardwilly98/elasticsearch-river-mongodb/1.4.0 

有人可以告訴我我要去哪裏嗎?

UPDATE

的錯誤似乎是因爲的ObjectId()和NumberLong()的。但是,我不希望這些字段被編入索引,因此我定義了一個自定義映射來發布這些字段。 自定義映射:

curl -XPUT localhost:9200/index1?pretty=1 -d '{ 
     "mappings" : { 
      "type1" : { 
       "_all" : {"enabled" : false}, 
       "properties" : { 
     "ns" : { 
      "dynamic" : "true", 
       "properties" : { 
        "n" : { 
        "type" : "string" 
        }, 
        "l" : { 
        "type" : "string" 
        }, 
      "t" : { 
        "type" : "string" 
        } 
     } 
     } 
       } 
      } 
     } 
}' 

理想情況下,_id和_oid應已由分析器但省略仍然是有任何方式爲這些對象提供映射。

ObjectId = org.bson.types.ObjectId and NumberLong = java.lang.Double

回答

1

JSON對象是不正確的。

似乎是你的_id屬性有點奇怪,ElasticSearch無法解析它。

+0

_id是一個ObjectId字段,同樣_oid字段也是一個NumberLong字段。我怎麼能去映射這些領域? – Rahul

+0

我真的不知道你的意思,但你不能這樣。我認爲它應該沒有那些「_id」:「503b29efe4b032e338f0581b」, 「_oid」:1182053, –

+0

不,文檔結構就像那樣。我只需要知道如何映射Object類型的字段。到目前爲止,我已經看到了僅針對基本數據類型(如int,float,string等)的映射 – Rahul

0

從MongoDB的文件刪除字段建立索引,你需要使用一個腳本:

  1. 安裝的Javascript插件ES_HOME \ BIN \插件-install elasticsearch/elasticsearch琅的JavaScript/1.2.0
  2. 在河設置中添加一個腳本屬性:delete ctx.document._id;

無法使用自定義映射刪除字段。

相關問題