Elasticsearch 6:拒绝映射更新,因为最终映射将有多个类型

时间:2018-06-12 15:01:17

标签: elasticsearch

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

错误:

  

由PUT上的低级别调用失败构建的无效NEST响应:   /产品/产品/ 1漂亮=真安培; error_trace =真

     

"拒绝将映射更新到[products]作为最终映射   有超过1种类型:[产品,产品]"

请求:

{
  "id": 1,
  "warehouseId": 0,
  "productStatus": 1,
  "sku": "102377",
  "name": "Name",
  "shortDescription": "Description",
  "longDescription": "Description",
  "price": 37.3200
}

我的代码:

    [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"));

5 个答案:

答案 0 :(得分:8)

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

See here了解更多信息。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

正如Batsu所说,从elasticSearch的第5版开始,删除了将索引视为数据库并将类型视为表格的概念,以实现lucene优化。

解决方案是使用@Document使用索引。

引荐:https://www.elastic.co/guide/en/elasticsearch/reference/6.7/removal-of-types.html

答案 3 :(得分:0)

在我的情况下,我试图删除official docs之后的记录,并且盲目地将_doc放在导致此错误的URL中。

这应该是您在AWS控制台的Indices部分的Mappings部分下看到的映射。更改网址中的值可以为我解决。

希望这很有帮助:)

答案 4 :(得分:-1)

我删除了索引并重新创建它,现在看起来很好。我想当我第一次创建索引时,我没有正确的属性名称,这可能解释了我得到的错误。