首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用嵌套更新ElasticSearch中的子对象

使用嵌套更新ElasticSearch中的子对象
EN

Stack Overflow用户
提问于 2015-07-23 00:39:35
回答 1查看 168关注 0票数 2

我有一个Elastic Search文档,结构如下:

代码语言:javascript
复制
{
   "Id": 123,
   "name": "MyName",
   "skill": {
         "skillId": 321,
         "name": "Skill Name",
         "description": "Skill Description"
    } 
}

我还有一个映射到这个文档的类:

代码语言:javascript
复制
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; }
}

现在我想更新一下elastic search的技能描述:

代码语言:javascript
复制
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()
        );

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

那么这里出了什么问题呢?

EN

回答 1

Stack Overflow用户

发布于 2015-10-07 20:40:56

您正在尝试使用ElasticSearch,就好像它是SQL一样。

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

代码语言:javascript
复制
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()
        );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31569091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档