0

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

2 Answers 2

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Here exShowroomPrice is a separate field. In my case I want exShowroomPrice as nested under price and also I want both Data1 and Datat2 need to be inserted. Here is the link which I refered to update my mapping
Probably impossible, because in Data1 price is a double, and in Data2 it is an object.
0

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.

2 Comments

For me remodeling the data is bit difficult. So Is there a option to update the mapping so that I can insert both type of data?
Yes, you can keep the "price": double and add a simple exShowroomPrice: double.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.