Задать вопрос
@ruboss

Как правильно написать скрипт на Groovy в elasticsearch sripts?

Всем привет! Есть "таблица" в ES, которая имеет вид
{"fields": [{"id":[{"innerField":[value]}]}]}}
или
object("fields", array( object( "ids", array( object( "innerFields", array( value) ) ) ) ) )
или
IndexResponse response = client
					.prepareIndex(index, type, id)
					.setSource(
							jsonBuilder()
								.startObject()
									.startArray("fields")
										.startObject()
											.startArray(filmId).
												startObject().array("ids",val).endObject()
											.endArray()
										.endObject()
									.endArray()
								.endObject())
					.execute().actionGet();


Как можно сделать запрос Update в скрипте на Groovy,
если, нужно добавить в массив ids запись и внутри него уже добавить запись в массив innerFields
Нужно чтобы записи не дублировались.

Вот дошел пока до этого, но выдает ексепшены

if (ctx._source.fields.contains(\""+id1+"\")) {
	if(!ctx._source.fields[\""+id1+"\"].innerFields.contains(\""+val1+"\")){
		ctx._source.fields[\""+id1+"\"].innerFields = [\""+val1+"\"]
	};
} else {
	ctx._source.fields += \""+id1+"\"
	ctx._source.fields[\""+id1+"\"].innerFields =  [\""+val1+"\"]
}

Сори, тут с разметкой проблемы

Буду оч благодарен, если подскажете куда копать или как изменить код!
  • Вопрос задан
  • 243 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@ruboss Автор вопроса
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def someJSONString = '{"films":[{"5":[5,3,4,5,6]}, {"4":[1,2]}]}}'
def slurper = new JsonSlurper()
def doc = slurper.parseText(someJSONString)

for(films in doc.films){
	if(setFilm || setSec)
		break
	def secs = films.get(cfid)
	if(secs != null){
		setFilm = true
		setSec = true
		for(sec in secs){
			if(sec == csec)
				setSec = false
		}
		if(setSec)
			secs.add(csec)
	}
}
if(!setFilm){
	def lhm = new LinkedHashMap();
	def al = new ArrayList();
	al.add(csec)
	lhm.put(cfid,al)
	doc.films += lhm;
}

def out= new File('ex.txt'); out.createNewFile(); out << doc;

println doc
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы