У меня есть данные, индексированные с использованием ElasticSearch, и у меня возникают проблемы с обновлением определенного поля. Отрывок из JSON выглядит следующим образом:ElasticSearch.Net - Обновление массива с несколькими компонентами
{
"_index": "indexName",
"_type": "type",
"_id": "00001",
"colors": [
"red",
"green"
]
"place": "london",
"person": [
{
"name": "john",
"age": "27",
"eyes": "blue"
}
{
"name": "mary",
"age": "19",
"eyes": "green"
}
]
}
мне нужно добавить в новый person
объект, что-то вроде:
{
"name": "jane",
"age": "30",
"eyes": "grey"
}
У меня People
определяется следующим образом:
public class People
{
public List<string> colors {get; set; }
public string place {get; set; }
public List<Person> person {get; set; }
}
public class Person
{
public string name {get; set; }
public string age {get; set; }
public string eyes {get; set; }
}
Я обновил color
без проблем:
client.Update<People>(u => u
.Id(u.Id)
.Index(u.Index)
.Type(u.Type)
.Script("if ctx._source.containsKey(\"color\")) { ctx._source.color += color; } else { ctx._source.color = [color] }")
.Params(p => p
.Add("color", "pink"))
);
Я не могу понять, как обновить поле person
, хотя это список Person
объектов, а не список строк.
Любая помощь очень ценится!
Ничего хорошего - ничего не обновляется. Я пробовал разные варианты передачи объекта Person в оператор обновления, ни один из которых не работал. – helencrump
Похоже, что свойство .Doc должно быть установлено с обновлением. Я обновил свой пример выше. Возможно, вы захотите попробовать использовать анонимный объект, как показано в документации NEST, - http://nest.azurewebsites.net/nest/core/update.html под анонимными объектами в виде частичных документов. –
Я пробовал это тоже без успеха, но спасибо за предложение. :) – helencrump