首页 > 解决方案 > elasticsearch中数据继承的最佳方法是什么?

问题描述

我有一个父类和两个像这样的孩子:

public class Parent {
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class FirstChild {
    public string IdentityCode { get; set; }
}

public class OtherChild {
    public string RegistrationCode { get; set; }
}

有一个问题:将这两个继承的类存储在ElasticSearch内部的同一个Index中是否是一种好方法?我看到有一个_type属性在我的文档存储在数据库中后被添加到其中,但它始终具有“doc”值。我测试了这段代码来填充它,但它似乎不是这样工作的。

await ElasticClient.IndexAsync<FirstChild>(child, m => m.Index(IndexName));

而且,我在 SO 上发现了这个问题,用于从数据库中检索我的条目,但它已经过时并且 API 已更改并且不再可访问。

我想知道将兄弟数据存储在同一个索引中是否是一种好方法,我该如何正确地做到这一点。

标签: c#elasticsearch.net-corenest

解决方案


从 ES 6.0 开始,不能再在同一个索引中存储多种类型_type,即您所指的字段将始终是docor _doc。在 ES 8.0 中,该_type字段将被完全删除。

但是,如果它对您的用例有意义,您仍然可以决定使用文档中存在的自定义type字段将多个类型存储在单个索引中。

您应该努力仅将共享相同(或非常相似)映射的相同索引数据存储在相同的索引中,这似乎不是 , 和 的情况ParentFirstChild但是SecondChild如果您public string type向类添加属性,您仍然可以这样做。


推荐阅读