2017-10-20 25 views
0

En ElasticSearch j'ai les données suivantes:Comment mettre à jour un champ particulier dans l'index Elasticsearch?

"hits": [ 
     { 
     "_index": "traffic", 
     "_type": "entry", 
     "_id": "922", 
     "_score": 1, 
     "_source": { 
      "Intensity": 0, 
      "tId": "9" 
     } 
     }, 
     { 
     "_index": "traffic", 
     "_type": "entry", 
     "_id": "2812", 
     "_score": 1, 
     "_source": { 
      "Intensity": 0, 
      "tId": "28" 
     } 
     } 

Comment puis-je mettre Intensity ea¡qual à 5 ​​pour tId égal à 28? Quelle requête de mise à jour dois-je écrire?

Répondre

1

Le _id pour tld = 28 est . Alors:

POST traffic/entry/2812/_update 
{ 
    "doc" : { 
     "Intensity" : 5 
    } 
} 

Source: Elasticsearch Reference Documentation

+0

Mais est-il possible de mettre à jour en fonction de 'où tid = 28'? – Dinosaurius

+0

Non, pas prêt à l'emploi. Vous pouvez utiliser ce plugin si: https://github.com/yakaz/elasticsearch-action-updatebyquery –

0
client.updateByQuery({ 
     index : 'traffic', 
     type : 'entry', 
     body : { 
     query : { 
      match : { 
      tId : 28 
      } 
     }, 
     script : 
     {'inline': 
     'ctx._source.Intensity = params["Intensity"];', 
     lang : 'painless', 
     params : {Intensity: 5 } 
     } 
     } 
    }, (err, res) => { 
     if (err) { 
     reject(err); 
     } else { 
     resolve(res); 
     } 
    }); 

pour le script qui permet, vous devez inclure dans le fichier script.inline: true elasticsearch.yaml

+0

Soyez prudent lors de l'activation des scripts: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules -scripting-security.html # modules-scripting-security-do-no-weaken –