2017-08-31 2 views
2

Comment supprimer les valeurs arraylist dans Elasticsearch à l'aide de la console de détection ou du curl?comment supprimer la valeur arraylist dans la recherche élastique en utilisant curl?

Je veux supprimer n'importe quel élément de tableau.

POST /q/q/ 
{ 
    "a": [ 
    "z", "q", "1" 
    ] 
} 

il travail ne marche pas pour moi:

POST /q/q/AV4sjk40mWHLgYFNkmNd/_update 
{ 
    "script": { 
     "lang": "painless", 
     "inline": "ctx._source.a -=newsupp", 
     "params": { 
      "newsupp": "p" 
     } 
    } 
} 

ou

POST /q/q/AV4sjk40mWHLgYFNkmNd/_update 
{ 
    "script": { 
     "lang": "painless", 
     "inline": "ctx._source.a.remove("1")" 
    } 
} 
+0

Essayez avec des guillemets simples, au lieu ' "ctx._source.a.remove ('1')"' – Val

+0

« ctx._source.a.remove ('1') "erreur de lancement:" script ":" ctx._source.a.remove ('z') ", " lang ":" indolore ", " because_by ": { " type ":" wrong_method_type_exception ", " raison ":" impossible de convertir MethodHandle (List, int) Object en (Object, String) Object " } } }, –

+3

Désolé, essayez plutôt" "ctx._source.a.removeIf (e -> e.equals ('1')) "' – Val

Répondre

1

Si vous souhaitez supprimer toutes les occurrences dans la liste, vous pouvez le faire:

{ 
    "script": { 
    "lang": "painless", 
    "inline": "ctx._source.a.removeAll(Collections.singleton('1'))" 
    } 
} 

ou si vous voulez supprimer seulement le premier, comme ceci:

{ 
    "script": { 
    "lang": "painless", 
    "inline": "ctx._source.a.remove(ctx._source.a.indexOf('1'))" 
    } 
} 

Notez également que si vous souhaitez utiliser des guillemets doubles, il est très bien, mais vous devez les échapper, comme ctx._source.a.indexOf(\"1\")).

Ou avec params:

{ 
    "script": { 
    "lang": "painless", 
    "inline": "ctx._source.a.remove(ctx._source.a.indexOf(yourParamName))", 
    "params": { 
     "yourParamName": "1" 
    } 
    } 
} 
+0

Merci dshockley .... Il fonctionne bien –