2015-12-04 5 views
1

Я использую Elasticsearch, и у меня есть поле сценария, написанное в Groovy. Для некоторых значений необходимо заменить значение myField, но я хочу, чтобы большинство значений проходило без изменений. Ниже приведен скрипт, за исключением документов, которые вообще не имеют поля. Как я могу сделать значение поля сценария пустым?Elasticsearch: возвращает пустое значение из поля сценария

if (some criteria) { 
    return ...; // modified value 
} 
// This returns 0 if myField doesn't exist 
return doc['myField'].value 

я могу проверить пустое состояние, но я не нашел способ вернуть пустое значение:

if (doc['myField'].empty) 
    return ??? 
+0

Под «пустое значение», вы имеете в виду пустую строку? – Val

+0

@Val no, я имею в виду больше как null. Если я возвращаю null, я получаю исключение. – TimK

ответ

0

Это совершенно нормально, чтобы вернуться null. Я думаю, что проблема заключается в последовательности ваших различных условий тестирования. Я попытался воспроизвести проблему, и я смог вернуться null со следующим сценарием:

"script_fields": { 
    "my_script_field": { 
     "script": "if (doc.myField.empty) { return null } else if (some criteria) { return modifiedValue } else { return doc.myField.value }" 
    } 
    } 

Первой проверкой для полей с пустыми значениями и возвращаю null. Затем у вас гарантировано наличие непустых и существующих полей. Таким образом, вы можете проверить свои критерии и вернуть любое измененное поле, которое вы хотите. Наконец, вы можете вернуть неизмененные значения для непустых полей, которые не соответствуют вашим заданным критериям.

Сценарий выглядит следующим образом:

if (doc.myField.empty) { 
    return null 
} else if (some criteria) { 
    return modifiedValue 
} else { 
    return doc.myField.value 
} 
Смежные вопросы