Skip to content

BUG JsonNetSerializer doesn't work for GeoLocation #3981

@horizondave

Description

@horizondave

I had this as my configuration:
var connSettings = new ConnectionSettings(pool, sourceSerializer: (builtin, settings) => new JsonNetSerializer( builtin, settings, () => new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ReferenceLoopHandling = ReferenceLoopHandling.Ignore } )) ...

Using the JsonNetSerializer DOES NOT serialize latitude and longitude properties of GeoPoint as "lat" and "lng", so every IndexDocument request fails.

`Unsuccessful low level call on PUT: /test_sites/site/123?pretty=true&error_trace=true
Audit trail of this API call:

  • [1] BadResponse: Node: http://localhost:9200/ Took: 00:00:00.0919641
    OriginalException: Elasticsearch.Net.ElasticsearchClientException: The remote server returned an error: (400) Bad Request.. Call: Status code 400 from: PUT /test_sites/site/123?pretty=true&error_trace=true. ServerError: Type: mapper_parsing_exception Reason: "failed to parse field [location] of type [geo_point]" CausedBy: "Type: parse_exception Reason: "field must be either [lat], [lon] or [geohash]"" ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
    at System.Net.HttpWebRequest.GetResponse()
    at Elasticsearch.Net.HttpWebRequestConnection.Request[TResponse](RequestData requestData)
    --- End of inner exception stack trace ---

Request:

{
"id": 123,
"name": "Daves Dummy Site",
"masterKey": "Master123abc",
"postalZipCode": "PE13 4EB",
"location": {
"latitude": 52.60862,
"longitude": 0.05959
},
"organisationId": 10001,
"organisationName": "Organisation Dummy",
"region": "East",
"country": "England",
"isActive": true
}

Response:

{
"error" : {
"root_cause" : [
{
"type" : "parse_exception",
"reason" : "field must be either [lat], [lon] or [geohash]",
"stack_trace" : "ElasticsearchParseException[field must be either [lat], [lon] or [geohash]]\r\n\tat org.elasticsearch.common.geo.GeoUtils.parseGeoPoint(GeoUtils.java:459)\r\n\tat org.elasticsearch.common.geo.GeoUtils.parseGeoPoint(GeoUtils.java:365)\r\n\tat org.elasticsearch.index.mapper.GeoPointFieldMapper.parseGeoPointIgnoringMalformed(GeoPointFieldMapper.java:358)\r\n\tat org.elasticsearch.index.mapper.GeoPointFieldMapper.parse(GeoPointFieldMapper.java:343)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:488)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:505)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.innerParseObject(DocumentParser.java:395)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObjectOrNested(DocumentParser.java:384)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.internalParseDocument(DocumentParser.java:96)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:69)\r\n\tat org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:281)\r\n\tat org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:799)\r\n\tat org.elasticsearch.index.shard.IndexShard.applyIndexOperation(IndexShard.java:775)\r\n\tat org.elasticsearch.index.shard.IndexShard.applyIndexOperationOnPrimary(IndexShard.java:744)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.lambda$executeIndexRequestOnPrimary$3(TransportShardBulkAction.java:458)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeOnPrimaryWhileHandlingMappingUpdates(TransportShardBulkAction.java:481)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeIndexRequestOnPrimary(TransportShardBulkAction.java:456)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeBulkItemRequest(TransportShardBulkAction.java:220)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.performOnPrimary(TransportShardBulkAction.java:164)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.performOnPrimary(TransportShardBulkAction.java:156)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:143)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:82)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:1059)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:1037)\r\n\tat org.elasticsearch.action.support.replication.ReplicationOperation.execute(ReplicationOperation.java:104)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.runWithPrimaryShardReference(TransportReplicationAction.java:433)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.lambda$doRun$0(TransportReplicationAction.java:374)\r\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:61)\r\n\tat org.elasticsearch.index.shard.IndexShard.lambda$wrapPrimaryOperationPermitListener$14(IndexShard.java:2586)\r\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:61)\r\n\tat org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:273)\r\n\tat org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:240)\r\n\tat org.elasticsearch.index.shard.IndexShard.acquirePrimaryOperationPermit(IndexShard.java:2561)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction.acquirePrimaryOperationPermit(TransportReplicationAction.java:996)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.doRun(TransportReplicationAction.java:370)\r\n\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:325)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:312)\r\n\tat org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:66)\r\n\tat org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:692)\r\n\tat org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:751)\r\n\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:748)\r\n"
}
],
"type" : "mapper_parsing_exception",
"reason" : "failed to parse field [location] of type [geo_point]",
"caused_by" : {
"type" : "parse_exception",
"reason" : "field must be either [lat], [lon] or [geohash]",
"stack_trace" : "ElasticsearchParseException[field must be either [lat], [lon] or [geohash]]\r\n\tat org.elasticsearch.common.geo.GeoUtils.parseGeoPoint(GeoUtils.java:459)\r\n\tat org.elasticsearch.common.geo.GeoUtils.parseGeoPoint(GeoUtils.java:365)\r\n\tat org.elasticsearch.index.mapper.GeoPointFieldMapper.parseGeoPointIgnoringMalformed(GeoPointFieldMapper.java:358)\r\n\tat org.elasticsearch.index.mapper.GeoPointFieldMapper.parse(GeoPointFieldMapper.java:343)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:488)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:505)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.innerParseObject(DocumentParser.java:395)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObjectOrNested(DocumentParser.java:384)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.internalParseDocument(DocumentParser.java:96)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:69)\r\n\tat org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:281)\r\n\tat org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:799)\r\n\tat org.elasticsearch.index.shard.IndexShard.applyIndexOperation(IndexShard.java:775)\r\n\tat org.elasticsearch.index.shard.IndexShard.applyIndexOperationOnPrimary(IndexShard.java:744)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.lambda$executeIndexRequestOnPrimary$3(TransportShardBulkAction.java:458)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeOnPrimaryWhileHandlingMappingUpdates(TransportShardBulkAction.java:481)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeIndexRequestOnPrimary(TransportShardBulkAction.java:456)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeBulkItemRequest(TransportShardBulkAction.java:220)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.performOnPrimary(TransportShardBulkAction.java:164)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.performOnPrimary(TransportShardBulkAction.java:156)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:143)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:82)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:1059)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:1037)\r\n\tat org.elasticsearch.action.support.replication.ReplicationOperation.execute(ReplicationOperation.java:104)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.runWithPrimaryShardReference(TransportReplicationAction.java:433)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.lambda$doRun$0(TransportReplicationAction.java:374)\r\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:61)\r\n\tat org.elasticsearch.index.shard.IndexShard.lambda$wrapPrimaryOperationPermitListener$14(IndexShard.java:2586)\r\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:61)\r\n\tat org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:273)\r\n\tat org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:240)\r\n\tat org.elasticsearch.index.shard.IndexShard.acquirePrimaryOperationPermit(IndexShard.java:2561)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction.acquirePrimaryOperationPermit(TransportReplicationAction.java:996)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.doRun(TransportReplicationAction.java:370)\r\n\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:325)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:312)\r\n\tat org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:66)\r\n\tat org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:692)\r\n\tat org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:751)\r\n\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:748)\r\n"
},
"stack_trace" : "MapperParsingException[failed to parse field [location] of type [geo_point]]; nested: ElasticsearchParseException[field must be either [lat], [lon] or [geohash]];\r\n\tat org.elasticsearch.index.mapper.GeoPointFieldMapper.parse(GeoPointFieldMapper.java:347)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:488)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:505)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.innerParseObject(DocumentParser.java:395)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseObjectOrNested(DocumentParser.java:384)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.internalParseDocument(DocumentParser.java:96)\r\n\tat org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:69)\r\n\tat org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:281)\r\n\tat org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:799)\r\n\tat org.elasticsearch.index.shard.IndexShard.applyIndexOperation(IndexShard.java:775)\r\n\tat org.elasticsearch.index.shard.IndexShard.applyIndexOperationOnPrimary(IndexShard.java:744)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.lambda$executeIndexRequestOnPrimary$3(TransportShardBulkAction.java:458)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeOnPrimaryWhileHandlingMappingUpdates(TransportShardBulkAction.java:481)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeIndexRequestOnPrimary(TransportShardBulkAction.java:456)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.executeBulkItemRequest(TransportShardBulkAction.java:220)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.performOnPrimary(TransportShardBulkAction.java:164)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.performOnPrimary(TransportShardBulkAction.java:156)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:143)\r\n\tat org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:82)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:1059)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:1037)\r\n\tat org.elasticsearch.action.support.replication.ReplicationOperation.execute(ReplicationOperation.java:104)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.runWithPrimaryShardReference(TransportReplicationAction.java:433)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.lambda$doRun$0(TransportReplicationAction.java:374)\r\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:61)\r\n\tat org.elasticsearch.index.shard.IndexShard.lambda$wrapPrimaryOperationPermitListener$14(IndexShard.java:2586)\r\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:61)\r\n\tat org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:273)\r\n\tat org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:240)\r\n\tat org.elasticsearch.index.shard.IndexShard.acquirePrimaryOperationPermit(IndexShard.java:2561)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction.acquirePrimaryOperationPermit(TransportReplicationAction.java:996)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.doRun(TransportReplicationAction.java:370)\r\n\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:325)\r\n\tat org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:312)\r\n\tat org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:66)\r\n\tat org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:692)\r\n\tat org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:751)\r\n\tat org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:748)\r\nCaused by: ElasticsearchParseException[field must be either [lat], [lon] or [geohash]]\r\n\tat org.elasticsearch.common.geo.GeoUtils.parseGeoPoint(GeoUtils.java:459)\r\n\tat org.elasticsearch.common.geo.GeoUtils.parseGeoPoint(GeoUtils.java:365)\r\n\tat org.elasticsearch.index.mapper.GeoPointFieldMapper.parseGeoPointIgnoringMalformed(GeoPointFieldMapper.java:358)\r\n\tat org.elasticsearch.index.mapper.GeoPointFieldMapper.parse(GeoPointFieldMapper.java:343)\r\n\t... 41 more\r\n"
},
"status" : 400
}
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions