我是Elasticsearch的新手。 我嵌套了数据。用户->汽车。 我在编写嵌套映射时需要帮助。
我看过有关嵌套查询的ES网站和我能做的基本网站。创建深度2/3的映射时遇到麻烦。
我正在尝试创建以下映射,但它似乎不起作用。
我需要能够查询以下内容:
给我所有users.usertype=salaried
和cars.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}}}]"
}
答案 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"
}
]
}
]
}
year
和make
属性应该在同一个对象中,而不是分开的