Сценарий Elasticsearch - посторонний оператор if - PullRequest
0 голосов
/ 07 мая 2018

Я использую update_by_query со следующим телом:

POST /documents/_update_by_query
 {
"script":{
  "source":"for(int i = 0;i < ctx._source.fields.size();i++){for (int j = 0; j < params.field_uid.size();j++){ if(params.field_uid[j].type == \"group\" ){ } else{ if(ctx._source.fields[i].uid == params.field_uid[j].uid){ ctx._source.fields.remove(i);} } }}",
  "params":{
   "field_uid":[{"uid":"number","type":"number"},{"uid":"test","type":"group"}]
   }
 },
 "query": { 
    "term": {
      "name": "test"
    }
  }
}

Это похоже на постороннее утверждение. Вот сообщение об ошибке, которое я получил:

{
    "error": {
        "root_cause": [
            {
                "type": "script_exception",
                "reason": "compile error",
                "script_stack": [
                    "... s.field_uid.size();j++){ if(params.field_uid[j].ty ...",
                    "                             ^---- HERE"
                ],
                "script": "for(int i = 0;i < ctx._source.fields.size();i++){for (int j = 0; j < params.field_uid.size();j++){ if(params.field_uid[j].type == 100 ){ } else{ if(ctx._source.fields[i].uid == params.field_uid[j].uid){ ctx._source.fields.remove(i);} } }}",
                "lang": "painless"
            }
        ],
        "type": "script_exception",
        "reason": "compile error",
        "script_stack": [
            "... s.field_uid.size();j++){ if(params.field_uid[j].ty ...",
            "                             ^---- HERE"
        ],
        "script": "for(int i = 0;i < ctx._source.fields.size();i++){for (int j = 0; j < params.field_uid.size();j++){ if(params.field_uid[j].type == 100 ){ } else{ if(ctx._source.fields[i].uid == params.field_uid[j].uid){ ctx._source.fields.remove(i);} } }}",
        "lang": "painless",
        "caused_by": {
            "type": "illegal_argument_exception",
            "reason": "Extraneous if statement."
        }
    },
    "status": 500
}

Может кто-нибудь помочь мне в этом? Что здесь не так?

1 Ответ

0 голосов
/ 07 мая 2018

Написанное выражение if не выполняет никаких операций и не имеет значения, в результате ES выдает ошибку extraneous if statement.

Удалите его и обновите условие соответственно, как показано ниже.

for(int i = 0;i < ctx._source.fields.size();i++){ for (int j = 0;j < 
params.field_uid.size();j++){ if(params.field_uid[j].type != \"group\"  
&& ctx._source.fields[i].uid == params.field_uid[j].uid){ 
ctx._source.fields.remove(i);}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...