我将使用嵌套字段定义映射。根据此documentation,/order-statistics/_mapping/order
的有效负载如下所示:
{
"mappings" : {
"order": {
"properties" : {
"order_no" : {
"type" : "string"
},
"order_products" : {
"type" : "nested",
"properties" : {
"order_product_no" : {
"type" : "int"
},
"order_product_options" : {
"type" : "nested",
"properties" : {
"order_product_option_no" : {
"type" : "int"
}
}
}
}
}
}
}
}
}
我已经通过调用order-statistics
创建了curl -XPUT 'localhost:9200/order-statistics'
索引,并且我使用预定义类型,例如int
,string
,{ {1}},但我收到以下错误,无法找到错误。
double
有人可以解释为什么这不起作用吗?
答案 0 :(得分:0)
您正在使用int
作为某些字段的类型,这些字段在2.x或5.x中不是有效类型。对于整数值,请使用integer
或long
,具体取决于您要存储的值。有关详细信息,请参阅the docs on core mapping types。
您使用的是哪个版本的elasticsearch - 2.x或5.x?如果您已经使用5.x,则应该使用keyword
或text
作为字符串字段,而不是仅使用string
,这是2.x的命名。但这仍然是一个警告。
此外,您应该了解使用nested
而不仅仅是object
时的含义。如果存储对象数组并且想要查询此类对象的多个属性,并且只保证只有这些文档与数组中的一个嵌套对象匹配所有条件的位置匹配,则必须使用嵌套类型。但这需要付出代价,因此请考虑使用简单的object
类型,如果这对您有用。有关详细信息,请参阅the docs on nested data type,尤其是the warning at the end。