elasticsearch 如何解决MapperParsingException:[test]的对象映射试图作为对象解析,但得到了EOF
在ElasicSearch中,我创建了一个索引“test”和如下所示的映射
elasticsearch 如何解决MapperParsingException:[test]的对象映射试图作为对象解析,但得到了EOF,
elasticsearch,
elasticsearch,在ElasicSearch中,我创建了一个索引“test”和如下所示的映射 { "index": { "_index": "test", "_type": "test" }, "settings": { "index.number_of_replicas": 0, "index.number_of_shards": 2 }, "mappings": { "_default_": { "date_detection": fal
{
"index": {
"_index": "test",
"_type": "test"
},
"settings": {
"index.number_of_replicas": 0,
"index.number_of_shards": 2
},
"mappings": {
"_default_": {
"date_detection": false
},
"test": {
"properties": {
"dateModified": {
"dynamic": "true",
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
}
}
}
}
}
}
}
索引已成功创建。
我给了你一个约会
{"index":{"_index":"test","_type":"test"}}
{"dateModified":{"date":"25/05/2015","time":"17:54 IST"}}
成功插入记录。如果我给出如下数据,则会出现错误
{"index":{"_index":"test","_type":"test"}}
{"dateModified":"25/05/2015"}
org.elasticsearch.index.mapper.MapperParsingException: object mapping for [test] tried to parse as object, but got EOF, has a concrete value been provided to it?
at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:498)
at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:541)
at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:490)
at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:392)
at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:193)
at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:511)
at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:419)
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)
那么如何解决这个问题,我读了一些与这个问题相关的博客和帖子,但是他们没有给出这个问题的解决方案。要解决这个问题,你需要在
dateModified
字段中索引相同类型的值。听起来像是在一个文档中为内部元素编制了索引,在下一个文档中为字符串值编制了索引
dateModified
字段的映射是一种内部对象
,它有两个字段,date
和time
。映射也是在索引第一个文档时创建的动态映射
第一份文件
{
"dateModified": {
"date": "25/05/2015",
"time": "17:54 IST"
}
}
{
"dateModified": "25/05/2015"
}
第二份文件
{
"dateModified": {
"date": "25/05/2015",
"time": "17:54 IST"
}
}
{
"dateModified": "25/05/2015"
}
它清楚地表明,您正在尝试为特定字段索引具有不同类型值的文档。弹性搜索不支持此操作。每个字段都应具有唯一的数据类型,并且值也应与映射中定义的值相同
这就造成了问题。不要尝试在不同文档中的单个字段中索引不同类型的值。我也有同样的问题,首先我用一个类型列表字段索引了一个文档,并且它正在工作,然后我将值从简单字符串更改为对象(用户定义的模型,例如:Employee,它转换为Json字符串),然后我得到了上述问题
更新了以前的文档和映射,然后开始工作是的,看起来无法在单个字段中存储不同的值类型。这里也提到了同样的事情: