1

我是弹性搜索的新手。我嵌套了 data.Users->Cars。我在编写嵌套映射时需要帮助。

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

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

我需要能够查询类似的东西:让我所有的文档 whereusers.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}}}]"
}
4

1 回答 1

0

您应该定义usertypeusers字段的属性,如下所示:

 {
    "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属性应该在同一个对象中,而不是分开的

于 2019-07-17T06:18:54.277 回答