elasticsearch 使用嵌套更新ElasticSearch中的子对象
我有一个具有以下结构的弹性搜索文档:elasticsearch 使用嵌套更新ElasticSearch中的子对象,elasticsearch,nest,elasticsearch,Nest,我有一个具有以下结构的弹性搜索文档: { "Id": 123, "name": "MyName", "skill": { "skillId": 321, "name": "Skill Name", "description": "Skill Description" } } 我还有一个映射到此文档的类: public class Person { public int Id { get; set; }
{
"Id": 123,
"name": "MyName",
"skill": {
"skillId": 321,
"name": "Skill Name",
"description": "Skill Description"
}
}
我还有一个映射到此文档的类:
public class Person {
public int Id { get; set; }
public string name { get; set; }
public Skill skill { get; set; }
}
public class Skill{
public int skillId { get; set; }
public string name { get; set; }
public string description { get; set; }
}
现在我想更新弹性搜索的技能描述:
var person = _client.Get(.......)
var newSkill = new Skill();
newSkill.skillId = person.skill.skillId;
newSkill.description = "This is a new Description"
var result = _client.Update<Person, Skill>(u => u
.IdFrom(person)
.Doc(newSkill)
.RetryOnConflict(3)
.Refresh()
);
var person=\u client.Get(……)
var newSkill=新技能();
newSkill.skillId=person.skill.skillId;
newSkill.description=“这是一个新的描述”
var result=\u client.Update(u=>u
.IdFrom(人)
.Doc(newSkill)
.RetryOnConflict(3)
.Refresh()
);
此代码不会更新人员的现有技能,而是将技能属性添加到人员的根目录中
那么这里出了什么问题?您试图使用ElasticSearch,就像使用SQL一样 您需要将新的
技能
分配给人员
,并更新整个人员
对象,如下所示:
var person = _client.Get(.......)
var newSkill = new Skill();
newSkill.name = "New Skill";
newSkill.description = "This is a new Description"
person.skill = newSkill;
var result = _client.Update<Person, Person>(u => u
.IdFrom(person)
.Doc(person)
.RetryOnConflict(3)
.Refresh()
);
var person=\u client.Get(……)
var newSkill=新技能();
newSkill.name=“新技能”;
newSkill.description=“这是一个新的描述”
person.skill=新闻技能;
var result=\u client.Update(u=>u
.IdFrom(人)
博士(人)
.RetryOnConflict(3)
.Refresh()
);