【问题标题】:Update child object in ElasticSearch using NEST使用 NEST 更新 ElasticSearch 中的子对象
【发布时间】:2015-10-07 20:40:55
【问题描述】:

我有一个具有以下结构的弹性搜索文档:

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

此代码不会更新人的现有技能,而是将技能属性添加到人的根。

那么这里有什么问题?

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    您正在尝试像使用 SQL 一样使用 ElasticSearch。

    您需要将新的Skill 分配给Person 并更新整个Person 对象,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      相关资源
      最近更新 更多