Elasticsearch映射解析器异常



我试图在Elasticsearch中创建一个嵌套的文档。

结构:

title,name,comments 

  • comments是一个嵌套的文档-在里面- Comment &Star_Rating。
  • 内部评论,名称和地址。

是下面提到的查询。

PUT /sounduu
    {
    "mappings": {
        "blogpost": {
            "properties": {
                "title": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "comments": {
                    "properties": {
                        "comment": {
                            "properties": {
                                "name": {
                                    "type": "string"
                                },
                                "address": {
                                    "type": "string"
                                }
                            }
                        },
                        "star_rating": {
                            "type": "long"
                        }
                    }
                }
            }
        }
    }
}

PUT /sounduu/blogpost/1
{
    "title": "someh_title",
    "name":"soundy",
    "comments": {
        "comment":"kuu",
        [{
             "name":"juwww",
             "address":"eeeey"
         },
         {
             "name":"jj",
             "address":oo"
        }]
    },
    "star_rating":6
}

错误:

{
   "error": {
      "root_cause": [
         {
            "type": "mapper_parsing_exception",
            "reason": "object mapping for [comments.comment] tried to parse field [comment] as object, but found a concrete value"
         }
      ],
      "type": "mapper_parsing_exception",
      "reason": "object mapping for [comments.comment] tried to parse field [comment] as object, but found a concrete value"
   },
   "status": 400
}

有人能帮忙吗?

在您的PUT /sounduu/blogpost/1请求中,您试图将"comment"属性视为嵌套对象和字符串。

格式化请求的JSON,你可以观察到问题:

{
    "title": "someh_title",
    "name": "soundy",
    "comments": {
        "comment": "kuu",
        [{
            "name": "juwww",
            "address": "eeeey"
        },
        {
            "name": "jj",
            "address": oo"
        }]
    },
    "star_rating":6
}

您需要更新您的映射以包含"text"属性,并相应地移动"comment": "kuu"内容,或者从您的请求中省略它以使用当前映射。

在这里的例子-对我来说,似乎合乎逻辑的分组,如:

PUT /sounduu
    {
    "mappings": {
        "blogpost": {
            "properties": {
                "title": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "comments": {
                    "properties": {
                        "text" : {
                            "type": "string"
                        },
                        "name": {
                            "type": "string"
                        },
                        "address": {
                            "type": "string"
                        }
                    }
                },
                "star_rating": {
                    "type": "long"
                }
            }
        }
    }
}

索引请求看起来像:

{
    "title": "someh_title",
    "name": "soundy",
    "comments": [
        {
            "text": "kuu",
            "name": "juwww",
            "address": "eeeey"
        },
        {
            "text": "kuu2",
            "name": "jj",
            "address": oo"
        }
    ],
    "star_rating":6
}

如果您正在使用elasticSearch更高版本,那么建议将'字符串'数据类型替换为'文本'。ElasticSearch社区已经丢弃了'string'.

修改后的请求应该是:

 `PUT /sounduu
    {
    "mappings": {
        "blogpost": {
            "properties": {
                "title": {
                    "type": "text"
                },
                "name": {
                    "type": "text"
                },
                "comments": {
                    "properties": {
                        "text" : {
                            "type": "text"
                        },
                        "name": {
                            "type": "text"
                        },
                        "address": {
                            "type": "text"
                        }
                    }
                },
                "star_rating": {
                    "type": "long"
                }
                }
            }
        }
    }`

最新更新