Исключение синтаксического анализатора

Я пытаюсь создать вложенный документ в ElasticSearch.

Структура: заголовок, имя, комментарии комментарии - это вложенный документ, внутри которого - 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
}

Может кто-нибудь помочь с этим?

1 ответ

В вашем 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
}

Вам нужно либо обновить отображение, чтобы включить свойство "текст", и переместить "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 отказалось от слова "строка".

Реформированный запрос должен быть:

 `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"
                }
                }
            }
        }
    }`
Другие вопросы по тегам