2016-06-15 13 views
0

ich verwende Elasticsearch 2.3 (Server und Java-Client)Number in Index-Aufbereitung mit Elasticsearch 2.3

-Code zur Herstellung 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(); 

Fehler:

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

+0

Können Sie die Zuordnung des Index teilen –

+0

@DhruvPal Ich habe keine Zuordnung irgendwo definiert. Es wird es dynamisch zuordnen. –

+0

Ich kann nicht verstehen, warum Sie eine UID in "ID" -Feld einfügen, da es auch ID für jedes Dokument bereitstellt. Gibt es eine Anforderung wie das.Auch sehe ich verursacht durch: MapperParsingException, also ich denke, es bezieht sich auf die Zuordnung –

Antwort

0

Zum allerersten Mal, wenn Sie ein Dokument mit ID-Feld eingefügt haben und sein Wert in einem beliebigen o Wenn die Nummerntypen verwendet werden, wird Long type auf das ID-Feld gesetzt, wenn keine Zuordnung für das ID-Feld in Zuordnungen gefunden werden konnte.

Wenn Sie also Ihr ID-Feld als String definieren möchten, sollten Sie es explizit dem Zeichenfolgendatentyp im Mapping zuordnen, bevor Sie eines der Dokumente in Ihren Index einfügen.