Elasticsearch 6中是否仍支持嵌套数据类型?

时间:2018-02-20 18:02:52

标签: c# elasticsearch nest

Removal of mapping types阅读本文后,如果ElasticSearch 6.x仍支持嵌套数据类型,我感到很困惑。我一直在使用以下文档结构,其中两个不同的文档类型放在一个索引中:

    public class ProductDoc
    {
        long ProductId { get; set; }
        string Name { get; set; }
        long BranchId { get; set; }
        decimal Rating { get; set; }
        DateTime PublishedAt { get; set; }

        [Nested]
        ICollection<VariantDoc> Variants { get; set; }
    }

    public class VariantDoc
    {
         long VariantId { get; set; }
         decimal Price { get; set; }
         int Quantity { get; set; }
         List<string> Features { get; set; }
    }

由于博客文章中不再提及在同一索引中保存不同的文档类型,我想知道如何组织这个索引结构。 一种可能的方法是为产品的每个变体制作一个平坦的标准化对象VariantDoc,在其中我将所有属性从ProductDoc移动到VariantDoc。这就是我要得到的:

public class VariantDoc
{
     long VariantId { get; set; }
     decimal Price { get; set; }
     int Quantity { get; set; }
     List<string> Features { get; set; }

    long ProductId { get; set; }
    string Name { get; set; }
    long BranchId { get; set; }
    decimal Rating { get; set; }
    DateTime PublishedAt { get; set; }
}

但我不认为这很聪明,因为我需要复制这么多数据,特别是因为单个产品甚至可以有60种变体。

1 个答案:

答案 0 :(得分:0)

nested data types are supported,因为结构仍然是父类型的一部分。在您的示例中,Variants集合属性是ProductDoc映射的一部分。

Elasticsearch 6.0+不再支持的是在单个索引中包含多个类型;只能指定一个类型名称,您可以决定它是什么。在将来的主要版本中,此类型名称也将被删除。