Elasticsearch 6:拒绝映射更新,因为最终映射将具有多于1种类型

Pri*_*ico 9 elasticsearch

我正在尝试将项目转换为使用最新的Elasticsearch 6并遇到此问题.我不知道问题是"产品"还是"产品".在我的映射和属性中,我指定了"产品",所以当我尝试索引产品时,我不确定为什么会出现此错误.

错误:

从PUT上的不成功低级别调用构建的无效NEST响应:/ products/products/1?pretty = true&error_trace = true

"拒绝将映射更新到[products],因为最终的映射将有多种类型:[Product,products]"

请求:

{
  "id": 1,
  "warehouseId": 0,
  "productStatus": 1,
  "sku": "102377",
  "name": "Name",
  "shortDescription": "Description",
  "longDescription": "Description",
  "price": 37.3200
}
Run Code Online (Sandbox Code Playgroud)

我的代码:

    [ElasticsearchType(Name = "products")]
    public class Product : BaseEntity
    {
        [Key]
        public int Id { get; set; }
        public int WarehouseId { get; set; }
        [Display(Name = "Product Status")]
        public Enums.ProductStatus ProductStatus { get; set; }
        [Required, StringLength(10)]
        public string Sku { get; set; }
        [Required, StringLength(200)]
        public string Name { get; set; }
        [StringLength(500), Display(Name = "Short Description")]
        public string ShortDescription { get; set; }
        [DataType(DataType.MultilineText), Display(Name = "Long Description")]
        public string LongDescription { get; set; }
        [Column(TypeName ="Money")]            
        public Nullable<decimal> Price { get; set; }
    }

connection.DefaultMappingFor<Product>(m => m.IndexName("products"));
Run Code Online (Sandbox Code Playgroud)

Cav*_*vaz 15

这是因为ES 6.x发生了重大变化:删除了映射(即使为了向后兼容,您仍然可以在路径中指定它),因此事实上将索引限制为单个类型.

有关详细信息,请参见此处

  • 我正在尝试从 ES 5 迁移到 7,有些人说映射已被删除,这让我很困惑,因为他们仍然在版本 7 的文档中讨论映射:https://www.elastic.co/guide/en/elasticsearch /reference/7.x/mapping.html (2认同)

Pra*_*rty 5

在 elasticsearch v6 之前,一个索引默认只能有 1 个映射。在之前的 5.x 版本中,一个索引可以进行多重映射。尽管您可以通过更新索引设置来更改此默认设置"index.mapping.single_type": false

在您的情况下,我的假设是您已经使用 mapping 创建了索引Product。这就是为什么它在您的第二个请求中使用“产品”(小情况下为 p)拒绝新映射的原因。


Pri*_*ico 1

我删除了索引并重新创建了它,现在看起来没问题了。我认为当我第一次创建索引时,我没有正确的属性名称,因此这可能可以解释我收到的错误。