web-dev-qa-db-fra.com

Comment mettre à jour un type de champ dans elasticsearch

Les documents ElasticSearch ne sont tout simplement pas clairs sur la façon de procéder. 

J'ai indexé des tweets et l'un des champs, created_at, indexé sous forme de chaîne au lieu d'une date. Je ne trouve pas comment réindexer avec ce changement via un appel curl. Si la réindexation est un processus compliqué, je préférerais de loin supprimer ce qui existe et recommencer. Mais, je ne trouve pas non plus comment spécifier les types de champs! 

Toute aide est grandement appréciée.

30
maximus

Vous devez définir un mappage à l'aide de Put Mapping AP I.

curl -XPUT 'http://localhost:9200/Twitter/_doc/_mapping' -H 'Content-Type: application/json'  -d '
{
    "_doc" : {
        "properties" : {
            "message" : {"type" : "text", "store" : true}
        }
    }
}
'

Une date peut être définie comme suit:

curl -XPUT 'http://localhost:9200/Twitter/_doc/_mapping' -H 'Content-Type: application/json'  -d '
{
    "_doc" : {
        "properties" : {
            "user" : {"type" : "keyword", "null_value" : "na"},
            "message" : {"type" : "text"},
            "postDate" : {"type" : "date"},
            "priority" : {"type" : "integer"},
            "rank" : {"type" : "float"}
        }
    }
}
'
27
dadoonet

Vous devez également spécifier le format et pas seulement le type si vous insérez un horodatage mysql.

"properties": {
    "updated_at": {
         "type": "date",
         "format": "yyyy-MM-dd HH:mm:ss"
     }
 }

Si nous considérons votre exemple, alors il devrait être comme 

"Tweet" : {
    "properties" : {
        "user" : {"type" : "string", "index" : "not_analyzed"},
        "message" : {"type" : "string", "null_value" : "na"},
        "postDate" : {"type" : "date" , "format": "yyyy-MM-dd HH:mm:ss" },
        "priority" : {"type" : "integer"},
        "rank" : {"type" : "float"}
    }
} 
9
Jawad

Mise à jour d'un type de champ dans un index existant:

PUT test-index/doc/_mapping
{
    "doc" : {
        "properties" : {
            "testDateField" : {"type" : "date"}
        }
    }
}

Ajouter un champ avec un type spécifique dans l'index existant:

PUT test-index
{
  "mappings": {
    "doc": {
      "properties": {
        "testDateField" : {
          "type": "date"
        }
      }
    }
  }
}
0
Jaya Krishna