今天寫的ES客戶端測試的文件裏一個方法報錯,方法體以下:
java
public IndexResponse createIndex(String indexName, String type, String jsonArray) { IndexRequestBuilder builder = client.prepareIndex(indexName, type).setSource(jsonArray); IndexResponse response = builder.execute().actionGet(); return response; }
報錯內容以下:json
Exception in thread "main" MapperParsingException[failed to parse]; nested: NotSerializableExceptionWrapper[not_x_content_exception: Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes]; at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:154) at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:309) at org.elasticsearch.index.shard.IndexShard.prepareCreate(IndexShard.java:529) at org.elasticsearch.index.shard.IndexShard.prepareCreateOnPrimary(IndexShard.java:506) at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:215) 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: NotSerializableExceptionWrapper[not_x_content_exception: Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes] at org.elasticsearch.common.compress.CompressorFactory.compressor(CompressorFactory.java:85) at org.elasticsearch.common.xcontent.XContentHelper.createParser(XContentHelper.java:50) at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:90) ... 17 more
在我這裏形成這一異常 的緣由是傳遞的參數jsonArray格式不對,我打印了下jsonArray,格式以下:app
[{"name":"hui1","salary":10000.39982635574,"age":8}, {"name":"hui2","salary":10000.160206564933,"age":11}, {"name":"hui3","salary":10000.417013742277,"age":28}, {"name":"hui4","salary":10000.26786620842,"age":7}]
{"name":"hui1","salary":10000.39982635574,"age":8}
即使將原來以 "[" 開關的jsonArray去年「[」,改爲這樣:elasticsearch
{"name":"hui1","salary":10000.39982635574,"age":8}, {"name":"hui2","salary":10000.160206564933,"age":11}, {"name":"hui3","salary":10000.417013742277,"age":28}, {"name":"hui4","salary":10000.26786620842,"age":7}
也同樣會報錯。測試