Elasticsearch: geo type context suggester doesn't allow path to refer to stored field

Created on 13 Feb 2018  路  2Comments  路  Source: elastic/elasticsearch

Elasticsearch version (bin/elasticsearch --version): Version: 5.4.2

JVM version (java -version): 1.8.0_141

OS version (uname -a if on a Unix-like system): Linux 3.10.0-693.11.6.el7.x86_64 #1 SMP Thu Jan 4 01:06:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Description of the problem including expected versus actual behavior:
When path field in geo type context suggester refers to a stored field, ES fails at indexing documents with error:

{
  "error": {
    "root_cause": [
      {
        "type": "number_format_exception",
        "reason": "For input string: \"43.6624803, -79.3863353\""
      }
    ],
    "type": "number_format_exception",
    "reason": "For input string: \"43.6624803, -79.3863353\""
  },
  "status": 400
}

Steps to reproduce:

  1. Create a new index with following mapping:
PUT place2
{
    "mappings": {
        "shops" : {
            "properties" : {
                "suggest" : {
                    "type" : "completion",
                    "contexts": [
                        { 
                            "name": "place_type",
                            "type": "category"
                        },
                        { 
                            "name": "location",
                            "type": "geo",
                            "precision": 4,
                            "path": "loc"
                        }
                    ]
                },
                "loc": {
                  "type": "geo_point",
                  "store": true
                }
            }
        }
    }
}
  1. Index a document with loc field filled in:
PUT place2/shops/2
{
    "suggest": {
        "input": "timmy's",
        "contexts": {
            "place_type": ["cafe", "food"]
        }
    },
    "loc": {
      "lat": 43.6624803,
      "lon": -79.3863353
    }
}

Provide logs (if relevant):

[2018-02-13T15:02:28,521][DEBUG][o.e.a.b.TransportShardBulkAction] [anmao] [place2][2] failed to execute bulk item (index) BulkShardRequest [[place2][2]] containing [index {[place2][shops][2], source[{
    "suggest": {
        "input": "timmy's",
        "contexts": {
            "place_type": ["cafe", "food"]
        }
    },
    "loc": {
      "lat": 43.6624803,
      "lon": -79.3863353
    }
}
]}]
java.lang.NumberFormatException: For input string: "43.6624803, -79.3863353"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.8.0_141]
        at java.lang.Long.parseLong(Long.java:589) ~[?:1.8.0_141]
        at java.lang.Long.parseLong(Long.java:631) ~[?:1.8.0_141]
        at org.elasticsearch.common.geo.GeoPoint.resetFromIndexableField(GeoPoint.java:113) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.search.suggest.completion.context.GeoContextMapping.parseContext(GeoContextMapping.java:211) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.search.suggest.completion.context.ContextMappings$TypedContextField.contexts(ContextMappings.java:134) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.apache.lucene.search.suggest.document.ContextSuggestField.wrapTokenStream(ContextSuggestField.java:87) ~[lucene-suggest-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:18:13]
        at org.apache.lucene.search.suggest.document.SuggestField.tokenStream(SuggestField.java:103) ~[lucene-suggest-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:18:13]
        at org.apache.lucene.index.DefaultIndexingChain$PerField.invert(DefaultIndexingChain.java:740) ~[lucene-core-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:17:15]
        at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:447) ~[lucene-core-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:17:15]
        at org.apache.lucene.index.DefaultIndexingChain.processDocument(DefaultIndexingChain.java:403) ~[lucene-core-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:17:15]
        at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:232) ~[lucene-core-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:17:15]
        at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:478) ~[lucene-core-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:17:15]
        at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1569) ~[lucene-core-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:17:15]
        at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1314) ~[lucene-core-6.5.1.jar:6.5.1 cd1f23c63abe03ae650c75ec8ccb37762806cc75 - jimczi - 2017-04-21 12:17:15]
        at org.elasticsearch.index.engine.InternalEngine.index(InternalEngine.java:639) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.index.engine.InternalEngine.indexIntoLucene(InternalEngine.java:583) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.index.engine.InternalEngine.index(InternalEngine.java:483) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.index.shard.IndexShard.index(IndexShard.java:560) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.index.shard.IndexShard.index(IndexShard.java:549) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.bulk.TransportShardBulkAction.executeIndexRequestOnPrimary(TransportShardBulkAction.java:484) ~[elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.bulk.TransportShardBulkAction.executeBulkItemRequest(TransportShardBulkAction.java:143) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:113) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:69) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:939) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:908) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.ReplicationOperation.execute(ReplicationOperation.java:113) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.onResponse(TransportReplicationAction.java:322) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.onResponse(TransportReplicationAction.java:264) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$1.onResponse(TransportReplicationAction.java:888) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$1.onResponse(TransportReplicationAction.java:885) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.index.shard.IndexShardOperationsLock.acquire(IndexShardOperationsLock.java:147) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.index.shard.IndexShard.acquirePrimaryOperationLock(IndexShard.java:1656) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction.acquirePrimaryShardReference(TransportReplicationAction.java:897) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction.access$400(TransportReplicationAction.java:93) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.doRun(TransportReplicationAction.java:281) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:260) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:252) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:627) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:638) [elasticsearch-5.4.2.jar:5.4.2]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-5.4.2.jar:5.4.2]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_141]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_141]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_141]

:SearcSuggesters >bug Search

Most helpful comment

I'm able to reproduce this on master, it looks like it's expecting a geohash but instead gets the coordinate pair as a string

https://github.com/elastic/elasticsearch/blob/14157c87051c1951907aa97ee6222c18b4824062/server/src/main/java/org/elasticsearch/common/geo/GeoPoint.java#L113)

@elastic/es-search-aggs

All 2 comments

I have the same issue when adding geo context to my context suggester field and set path for its geo field.
Any update available for this?

PS: I'm using El 6.2.2

"index" => array:5 [
        "_index" => "v1"
        "_type" => "_doc"
        "_id" => "98270402205220"
        "status" => 400
        "error" => array:2 [
           "type" => "number_format_exception"
          "reason" => "null"
        ]
]

I'm able to reproduce this on master, it looks like it's expecting a geohash but instead gets the coordinate pair as a string

https://github.com/elastic/elasticsearch/blob/14157c87051c1951907aa97ee6222c18b4824062/server/src/main/java/org/elasticsearch/common/geo/GeoPoint.java#L113)

@elastic/es-search-aggs

Was this page helpful?
0 / 5 - 0 ratings

Related issues

clintongormley picture clintongormley  路  3Comments

ppf2 picture ppf2  路  3Comments

rjernst picture rjernst  路  3Comments

matthughes picture matthughes  路  3Comments

makeyang picture makeyang  路  3Comments