2017-08-31 84 views
2

如何使用感應控制檯或捲曲刪除Elasticsearch中的ArrayList值?如何在使用curl的彈性搜索中刪除arraylist值?

我想刪除任何數組元素。

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

這對我不工作:

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

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

嘗試用單引號,而是' 「ctx._source.a.remove( '1')」' – Val

+0

「ctx._source.a.remove( '1') 「throwing error:」script「:」ctx._source.a.remove('z')「, 」lang「:」painless「, 」caused_by「:{ 」type「:」wrong_method_type_exception「, 」reason 「:」不能將MethodHandle(List,int)對象轉換爲(Object,String)對象「 } } }, –

+3

對不起,試試這個代替'」ctx._source.a.removeIf(e - > e.equals '1'))「' – Val

回答

1

如果你想刪除列表中的所有事件,你可以這樣做:

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

或者如果你想刪除第一個,像這樣:

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

還要注意的是,如果你想使用雙引號,這很好,但你需要逃避它們,就像ctx._source.a.indexOf(\"1\"))

或者使用參數:

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

謝謝你dshockley ....它的工作正常 –