我试图将项目转换为使用最新的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"));
答案 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)
我删除了索引并重新创建它,现在看起来很好。我想当我第一次创建索引时,我没有正确的属性名称,这可能解释了我得到的错误。