2015-06-25 2 views
0

Я хочу использовать сценарии в пути [https://www.elastic.co/blog/running-groovy-scripts-without-dynamic-scripting] для обеспечения безопасности.обновление со сценарием, предварительно установленным в elasticsearch

Я пробовал это в sense (chrome plugin), и он хорошо работает. Удивление, как добиться этого в эластике.

Например, я хочу, чтобы удалить поле из дока, и такой код:

def replaceWithId(alarmId: String, fieldName: String, fieldValue: Map[String, Any]) = { 
client.execute { 
    update id alarmId in IndexType script """{"file":"removeOperationField"}""" 

}} 

но это не удалось.

+0

ли файл на самом деле называется «removeOperationField» или «removeOperationField.groovy» или что-то? – monkjack

+0

имя файла removeOperationField, так как его тип groovy нам не нужно объявлять lang. –

+0

java-клиент может сделать это с помощью 'client.prepareUpdate (« index »,« type »,« id ») .setScript (« removeIpField », ScriptService.ScriptType.FILE) .get' –

ответ

0

Вы должны установить тип сценария, а не включать его в JSON в явном виде, например:

def replaceWithId(alarmId: String) = { 
    client.execute { 
    update id alarmId in IndexType script("scriptname", ScriptType.File) 
    } 
} 
+0

После обновления до elastic4s 1.6.0 я наконец увидел эту функцию. Я использовал 1.3.3, где сценарий (строка) не может указывать тип скрипта. –