web-dev-qa-db-fra.com

Comment résoudre MapperParsingException: le mappage d'objet pour [test] a tenté d'analyser en tant qu'objet, mais a obtenu EOF

Dans ElasicSearch, j'ai créé un index "test" et des mappages comme ci-dessous

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

L'index est créé avec succès. J'ai donné une date comme

{"index":{"_index":"test","_type":"test"}}
{"dateModified":{"date":"25/05/2015","time":"17:54 IST"}}

Enregistrement inséré avec succès.Si je donne des données comme ci-dessous, ce qui donne une erreur

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

Ensuite, comment résoudre ce problème, j'ai lu certains blogs et articles liés à ce problème, mais ils n'ont pas donné de solution à ce problème.

25
RamRajVasavi

Pour résoudre ce problème, vous devez indexer le même type de valeur dans le champ dateModified. Il semble que vous ayez indexé un élément interne dans un document et la valeur de chaîne dans le document suivant.

Le mappage du champ dateModified est une sorte de inner object qui a 2 champs, date & time. Le mappage également dynamic qui a été créé lors de l'indexation du premier document.

1er document

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

2e document

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

Il indique clairement que vous essayez d'indexer un document avec différents types de valeurs pour un champ particulier. qui n'est pas pris en charge par la recherche élastique. Chaque champ doit avoir un type de données unique et les valeurs doivent également être identiques à celles définies dans le mappage.

Cela provoque le problème. N'essayez pas d'indexer différents types de valeurs dans un seul champ dans différents documents.

28
Arun Prakash