-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BUG JsonNetSerializer doesn't work for GeoLocation #3981
Comments
What version of NEST are you using, and what version of Elasticsearch are you targeting? |
Sorry, |
russcam
added a commit
that referenced
this issue
Aug 7, 2019
This commit adds GeoLocation to types handled by the internal serializer so that a property on a document POCO of type GeoLocation is serialized by the internal serializer. It's not possible with the current test configuration to test this scenario, because IL rewriting happens after unit tests are run, so the Json.NET constructs used on Nest types are recognised by the JsonNetSerializer. Have added test that _would_ test behaviour, should tests be run after IL-merging in the future. Fixes #3981
I've opened #3997 to address |
Mpdreamz
pushed a commit
that referenced
this issue
Aug 9, 2019
This commit adds GeoLocation to types handled by the internal serializer so that a property on a document POCO of type GeoLocation is serialized by the internal serializer. It's not possible with the current test configuration to test this scenario, because IL rewriting happens after unit tests are run, so the Json.NET constructs used on Nest types are recognised by the JsonNetSerializer. Have added test that _would_ test behaviour, should tests be run after IL-merging in the future. Fixes #3981
Mpdreamz
pushed a commit
that referenced
this issue
Aug 9, 2019
This commit adds GeoLocation to types handled by the internal serializer so that a property on a document POCO of type GeoLocation is serialized by the internal serializer. It's not possible with the current test configuration to test this scenario, because IL rewriting happens after unit tests are run, so the Json.NET constructs used on Nest types are recognised by the JsonNetSerializer. Have added test that _would_ test behaviour, should tests be run after IL-merging in the future. Fixes #3981 (cherry picked from commit 623c724)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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:
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
}
`
The text was updated successfully, but these errors were encountered: