在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种变体。
答案 0 :(得分:0)
nested
data types are supported,因为结构仍然是父类型的一部分。在您的示例中,Variants
集合属性是ProductDoc
映射的一部分。
Elasticsearch 6.0+不再支持的是在单个索引中包含多个类型;只能指定一个类型名称,您可以决定它是什么。在将来的主要版本中,此类型名称也将被删除。