Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 使用嵌套更新ElasticSearch中的子对象_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch 使用嵌套更新ElasticSearch中的子对象,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 使用嵌套更新ElasticSearch中的子对象,elasticsearch,nest,elasticsearch,Nest" />

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()
);