elasticsearch:如何用嵌套字段定义映射?

时间:2017-08-06 11:30:21

标签: elasticsearch

我将使用嵌套字段定义映射。根据此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'索引,并且我使用预定义类型,例如intstring,{ {1}},但我收到以下错误,无法找到错误。

double

有人可以解释为什么这不起作用吗?

1 个答案:

答案 0 :(得分:0)

您正在使用int作为某些字段的类型,这些字段在2.x或5.x中不是有效类型。对于整数值,请使用integerlong,具体取决于您要存储的值。有关详细信息,请参阅the docs on core mapping types

您使用的是哪个版本的elasticsearch - 2.x或5.x?如果您已经使用5.x,则应该使用keywordtext作为字符串字段,而不是仅使用string,这是2.x的命名。但这仍然是一个警告。

此外,您应该了解使用nested而不仅仅是object时的含义。如果存储对象数组并且想要查询此类对象的多个属性,并且只保证只有这些文档与数​​组中的一个嵌套对象匹配所有条件的位置匹配,则必须使用嵌套类型。但这需要付出代价,因此请考虑使用简单的object类型,如果这对您有用。有关详细信息,请参阅the docs on nested data type,尤其是the warning at the end