【问题标题】:How to solve MapperParsingException: object mapping for [test] tried to parse as object, but got EOF如何解决 MapperParsingException:[test] 的对象映射尝试解析为对象,但得到 EOF
【发布时间】:2020-01-15 04:48:55
【问题描述】:

在 ElasicSearch 中,我创建了一个索引“测试”和如下映射

{
  "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)

那么如何解决这个问题,我阅读了一些与这个问题相关的博客和帖子,但他们没有给出这个问题的解决方案。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    要解决此问题,您需要在字段dateModified 中索引相同类型的值。听起来您索引了一个文档中的内部元素和下一个文档中的字符串值。

    dateModified 字段的映射类似于 inner object,它有 2 个字段,datetime。该映射也是在您索引第一个文档时创建的 dynamic

    第一个文档

    {
        "dateModified": {
            "date": "25/05/2015",
            "time": "17:54 IST"
        }
    }
    

    第二份文件

    {
        "dateModified": "25/05/2015"
    }
    

    它清楚地表明您正在尝试为特定字段使用不同类型的值来索引文档。弹性搜索不支持。每个字段都应具有唯一的数据类型,并且值也应与映射中定义的相同。

    这会导致问题。不要尝试在不同文档的单个字段中索引不同类型的值。

    【讨论】:

    【解决方案2】:

    我有同样的问题,首先我用一个 List 类型的文件索引了一个文档并且它正在工作,然后我将值从简单的 String 更改为 Object(用户定义的模型,例如:Employee,它转换为 Json String ),然后我遇到了上述问题。

    更新了之前的文档和映射,然后就开始工作了

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      相关资源
      最近更新 更多