多级嵌套映射和查询上的“映射定义具有不受支持的参数”错误

时间:2019-07-17 05:36:49

标签: elasticsearch nested-queries elasticsearch-nested

我是Elasticsearch的新手。 我嵌套了数据。用户->汽车。 我在编写嵌套映射时需要帮助。

我看过有关嵌套查询的ES网站和我能做的基本网站。创建深度2/3的映射时遇到麻烦。

我正在尝试创建以下映射,但它似乎不起作用。

我需要能够查询以下内容: 给我所有users.usertype=salariedcars.make=honda处的文档。

这是我的地图:

{
  "mappings": {
    "properties": {
      "users": {
        "type": "nested",
        "usertype": {
          "type": "text"
        },
        "cars": {
          "type": "nested",
          "properties": {
            "make": {
              "type": "text"
            },
            "model": {
              "type": "text"
            }
          }
        }
      }
    }
  }
}

这是我的示例数据:

{
  "users": [
    {
      "usertype": "salaried",
      "cars": [
        {
          "make": "honda"
        },
        {
          "year": "2016"
        }
      ]
    },
    {
      "usertype": "business",
      "cars": [
        {
          "make": "BMW"
        },
        {
          "year": "2018"
        }
      ]
    }
  ]
}

在创建映射时,出现以下错误:

"caused_by": {
     "type": "mapper_parsing_exception",
     "reason": "Mapping definition for [user] has unsupported parameters:  [details : {type=nested, properties={make={type=text}}}]"
}

1 个答案:

答案 0 :(得分:0)

您应将usertype定义为users字段的属性,如下所示:

 {
    "mappings": {
        "properties": {
            "users": {
                "type": "nested",
                "properties": {
                    "usertype": {
                        "type": "text"
                    },
                    "cars": {
                        "type": "nested",
                        "properties": {
                            "make": {
                                "type": "text"
                            },
                            "model": {
                                "type": "text"
                            }
                        }
                    }
                }
            }
        }
    }
}

我认为您的示例数据中应该有一个问题

{
    "users": [
        {
            "usertype": "salaried",
            "cars": [
                {
                    "make": "honda",
                    "year": "2016"
                }
            ]
        },
        {
            "usertype": "business",
            "cars": [
                {
                    "make": "BMW",
                    "year": "2018"
                }
            ]
        }
    ]
}

yearmake属性应该在同一个对象中,而不是分开的