ElasticSearch 5: MapperParserException while Inserting data

╄→尐↘猪︶ㄣ 提交于 2019-12-13 20:25:58

问题


My initial mapping was

{
  "vehiclemodel": {
    "properties": {
      "price": {
        "type": "double"
      }
    }
  }
}

Later I updated the mapping with below

{
  "vehiclemodel": {
    "properties": {
      "price": {
        "type": "double",
        "fields": {
          "exShowroomPrice": {
            "type": "double"
          }
        }
      }
    }
  }
}

Now when I add Data1 it getting added, but when I add Data2 it throws below exception

Data1 :

{
  "price": 36992043     
}

Data2 :

{
  "price": {
    "exShowroomPrice": 36992043
  }
}

Exception :

{
    'index': {
        '_index': 'notes',
        '_type': 'vehiclemodel',
        '_id': 'fb85823a-021b-468c-91d9-8db5f001ee06',
        'status': 400,
        'error': {
            'type': 'mapper_parsing_exception',
            'reason': 'failed to parse [price]',
            'caused_by': {
                'type': 'json_parse_exception',
                'reason': 'Current token (START_OBJECT) not numeric, can not use numeric value accessors\n at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@6e2393ee; line: 1, column: 277]'
            }
        }
    }
}

My collectionvehiclemodel has both type of data in MongoDB. I am using mongo-connector to sync data btw mongo and ES. When I try to sync I get the above exception


回答1:


Your mapping is not correct for what I assume you want to achieve.

The fields mapping allows you to index the same field with different analyzers for example (see the linked docs for details). So in your case, you would push

{
    "price" : 1923
}

and ES will store it twice, once as price and once under the path price.exShowroomPrice.

You could just add a completely separate property, the hierarchy does not need to be maintained. For example a mapping like:

{
    "vehiclemodel": {
        "properties": {
            "price": {
                "type": "double"
            },
            "exShowroomPrice": {
                "type": "double"
            }
        }
    }
}

And then send the data like:

{
    "price" : 1923
    "exShowroomPrice" : 1800
} 

I don't know how mongo-connector works, but there should be a way to map these fields I would assume.




回答2:


Fields in elasticsearch mappings are thought to index the same field in different ways, such as processing the input field as a string or as a keyword. So you defined price as a double but elasticsearch finds an {} so this exception is thrown. You have to remodel your data there.



来源:https://stackoverflow.com/questions/45508156/elasticsearch-5-mapperparserexception-while-inserting-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!