Elasticsearch错误:无法解析,文档为空

时间:2013-12-10 17:37:23

标签: java json elasticsearch

当我尝试索引一个简单的JSON文档时,我在Elasticsearch(0.90)API中收到此错误。

以下是代码:

TransportClient client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
String indexName = "searchwriter-" + FORMAT.format(System.currentTimeMillis());
client.prepareIndex(indexName, "trace", String.valueOf(id++)).setOpType(IndexRequest.OpType.INDEX).setSource(inputLine).execute().actionGet();
上述代码中的

inputLine 不为空。它的价值是

  

{ “类型”: “MasterCard1”, “名称”: “Zaheen1”}

以下例外:

[2013-12-10 11:26:24,475][DEBUG][action.index             ] [Foxfire] [searchwriter-2013-12-10][0], node[Hamh7CPnQIqqp4pYA-DD9w], [P], s[STARTED]: Failed to execute [index {[searchwriter-2013-
12-10][trace][2], source[_na_]}]                                                                                                                                                                
org.elasticsearch.index.mapper.MapperParsingException: failed to parse, document is empty                                                                                                       
        at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:530)                                                                                                         
        at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:452)                                                                                                         
        at org.elasticsearch.index.shard.service.InternalIndexShard.prepareIndex(InternalIndexShard.java:341)                                                                                   
        at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:203)                                                                           
        at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:533)  
        at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:418)             
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)                                                                                                      
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)                                                                                                      
        at java.lang.Thread.run(Thread.java:724)                                                                                                                                                
我用Google搜索,但我找不到原因。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

那应该有用。所以,我猜想inputLine不包含您认为它包含的内容。尝试使用硬编码版本替换inputLine

client.prepareIndex(indexName, "trace", String.valueOf(id++)).setOpType(IndexRequest.OpType.INDEX).setSource("{\"type\":\"MasterCard1\",\"name\":\"Zaheen1\"}").execute().actionGet();

看看它是否解决了这个问题。

以防万一,您是否在客户端和服务器上使用相同版本的elasticsearch?