Подтвердить что ты не робот

Как решить MapperParsingException: сопоставление объектов для [test] пыталось разобрать как объект, но получило EOF

В ElasicSearch я создал один индекс "test" и сопоставления, как показано ниже

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

Затем, как решить эту проблему, я прочитал некоторые блоги и сообщения, связанные с этой проблемой, но они не дали решения этой проблемы.

4b9b3361

Ответ 1

Чтобы решить эту проблему, вам нужно проиндексировать значение того же типа в поле dateModified. Похоже, вы проиндексировали внутренний элемент в одном документе и строковое значение в следующем документе.

Отображение для поля dateModified является видом inner object который имеет 2 поля, date и time. Отображение также dynamic которое было создано при индексировании первого документа.

1-й документ

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

2-й документ

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

В нем четко сказано, что вы пытаетесь проиндексировать документ с разными типами значений для определенного поля. который не поддерживается упругим поиском. Каждое и каждое поле должно иметь уникальный тип данных, а значения также должны быть такими, как определено в отображении.

Это вызывает проблему. Не пытайтесь индексировать разные типы значений в одном поле в разных документах.