2017-10-21 72 views
1

Lorsque je crée un graphique à secteurs, je souhaite remplacer toutes les valeurs vides d'un champ myfield (c'est-à-dire égal à "") par "Others". Comment puis-je le faire à Kibana?Comment remplacer toutes les valeurs vide/vide par "Autres" dans Elasticsearch?

Si c'est impossible de faire avec Kibana, alors comment puis-je le faire en utilisant Elasticsearch.

enter image description here

MISE À JOUR:

J'exécuté cette requête et il ne m'a pas donné d'erreur:

GET myindex/entry/_update_by_query 
{ 
    "query":{ 
    "term": { 
     "myfield.keyword": { 
     "value": "" 
     } 
    } 
    }, 
    "script":{ 
    "inline": "ctx._source.myfield = 'Other'", 
    "lang": "painless" 
    } 
} 

Je reçois cette sortie:

{ 
    "took": 5, 
    "timed_out": false, 
    "total": 0, 
    "updated": 0, 
    "deleted": 0, 
    "batches": 0, 
    "version_conflicts": 0, 
    "noops": 0, 
    "retries": { 
    "bulk": 0, 
    "search": 0 
    }, 
    "throttled_millis": 0, 
    "requests_per_second": -1, 
    "throttled_until_millis": 0, 
    "failures": [] 
} 

Mais quand je vérifie les valeurs de myfield, j'obtiens à nouveau la valeur "", au lieu de Other.

GET myindex/_search? 
{ 
"size":0, 
    "aggs": { 
    "months": { 
    "terms" : { 
     "field": "myfield" 
    } 
    } 
    } 
} 

Ceci est mon mappage d'index:

PUT /myindex 
{ 
    "mappings": { 
     "entry": { 
     "_all": { 
     "enabled": false 
     }, 
     "properties": { 
      "Id": { 
      "type":"keyword" 
      }, 
      "Country": { 
      "type":"keyword" 
      }, 
      "myfield": { 
      "type":"keyword" 
      }, 
      "Year": { 
      "type":"integer" 
      }, 
      "Counter": { 
      "type":"integer" 
      } 
     } 
     } 
    } 
} 

Répondre

1

Pour autant que je sache, cela ne peut être fait à la fin de Kibana. Vous pouvez mettre à jour tous vos documents de champ vides avec "Autres" dans l'index Elasticsearch.

Pour mettre à jour sur Elasticsearch fin, vous pouvez utiliser Update By Query API. Voici le code/la requête de mise à jour.

GET myindex/entry/_update_by_query 
{ 
    "query":{ 
    "term": { 
     "myfield": { 
     "value": "" 
     } 
    } 
    }, 
    "script":{ 
    "inline": "ctx._source.myfield = 'Other'", 
    "lang": "painless" 
    } 
} 
+0

Merci. Qu'est-ce que 'ctx' et' _source'? – Dinosaurius

+0

Je reçois 'parse_exception':' reason ":" l'un des champs [inline], [file] ou [stored] attendus, mais aucun " – Dinosaurius

+0

sur lequel vous travaillez –

0

Vous pouvez essayer ce genre d'un script sans douleur dans Kibana, ce qui créera un nouveau champ scénarisé de type chaîne à votre index sur l'exécution.

Sélectionnez: Management -> name_of_your_index -> champs scriptés -> Champ Ajouter un script.

Suivant: donnez un nom au script et définissez son type sur "chaîne".

Puis:

def source = doc['name_of_the_field'].value; 
if (source != null) { return source; } 
else { return "Other";} 

Ensuite, utilisez ce nouveau champ dans votre visualisation.