Reputation: 13753
I am using Elasticsearch 2.3 (both server and java client)
Code for preparing index:
private TransportClient txClient;
// client intialization
Map<String, String> values = new HashMap<String, String>();
values.put("name", "Dev");
values.put("id", "2f3cc5d4-9c4c-4a49-9ebd-c8cd86758118");
values.put("salary", "50000");
IndexResponse response = txClient
.prepareIndex("novel","books", "1de90f05-7cc8-4796-9e92-5b766e8bb0d1")
.setSource(values).execute().actionGet();
Error:
Caused by: MapperParsingException[failed to parse [id]]; nested: NumberFormatException[For input string: "2f3cc5d4-9c4c-4a49-9ebd-c8cd86758118"]; at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:329) at org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:309) at org.elasticsearch.index.mapper.DocumentParser.parseAndMergeUpdate(DocumentParser.java:738) at org.elasticsearch.index.mapper.DocumentParser.parseDynamicValue(DocumentParser.java:625) at org.elasticsearch.index.mapper.DocumentParser.parseValue(DocumentParser.java:442) at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:262) at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:122) at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:309) at org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:580) at org.elasticsearch.index.shard.IndexShard.prepareIndexOnPrimary(IndexShard.java:559) at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:212) at org.elasticsearch.action.index.TransportIndexAction.executeIndexRequestOnPrimary(TransportIndexAction.java:224) at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:158) at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:66) at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.doRun(TransportReplicationAction.java:639) at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:279) at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:271) at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75) at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376) at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NumberFormatException: For input string: "2f3cc5d4-9c4c-4a49-9ebd-c8cd86758118" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Long.parseLong(Long.java:589) at java.lang.Long.parseLong(Long.java:631) at org.elasticsearch.common.xcontent.support.AbstractXContentParser.longValue(AbstractXContentParser.java:145) at org.elasticsearch.index.mapper.core.LongFieldMapper.innerParseCreateField(LongFieldMapper.java:275) at org.elasticsearch.index.mapper.core.NumberFieldMapper.parseCreateField(NumberFieldMapper.java:241) at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:321) ... 23 more
Upvotes: 0
Views: 1200
Reputation: 11
For the very first time if you inserted document having ID field and its value is in any of the number types then it will set Long type to the IDfield if it could not find any mapping for the ID field in mappings.
So if you want your id field as String, you should explicitly map it to string data type in mapping before inserting any of the documents into your index.
Upvotes: 1