Сопоставление вложенного документа JSON в Elasticsearch

Я вставил следующий документ JSON в ElasticSearch.

{
    "AppName": "undefined",
    "CPUs": 8,
    "Errors": 0,
    "Forms": 2,
    "Group": "Unknown",
    "Language": "en-GB",
    "UserName": "user.name",
    "msgType": "234",
    "bent": "{
       \"ActiveT\": 6,
        \"ErrorM\": \"None\",
        \"Except\": \"None\",
        \"HadErr\": \"false\",
        \"HM\": 62,
        \"NHM\": 57,
        \"Parameter\": \"14331232706\",
        \"ReturnCode\": \"3050\",
        \"Severity\": \"info\",
        \"Timestamp\": \"Tue July0209: 58: 16NZST2015\",
        \"TId\": \"9891319709\",
        \"UserInfo\": \"Unknown\",

    }"

}

Я хочу иметь возможность строить графики, используя вложенные внутри поля, такие как HM, NHM, ActiveT и т. д. Моя структура внутри эластичного поиска выглядит следующим образом.

my_indes/my_doc_type/info_id

Информация приведена выше в виде документа JSON. Я использую приведенное ниже сопоставление для сопоставления вложенной структуры JSON bent.

curl -XPOST localhost:9200/my_index/my_doc_type/_mapping?pretty -d '{
"events":{
        "_timestamp" : {
            "enabled" : true,
            "store" : true,
             "path" : "post_date",
            "format" : "yyyy-MM-dd HH:mm:ss"
        },
  "properties" : {
                "CPUs"  : {
                        "type" : "long",
                        "index": "not_analyzed"
                        },
                "Language"  : {
                        "type" : "string",
                        "index": "not_analyzed"
                        },
                "User"  : {
                        "type" : "string",
                        "index": "not_analyzed"
                        },

                "Forms"  : {
                        "type" : "long",
                        "index": "not_analyzed"
                        },
                "Errors"  : {
                        "type" : "long",
                        "index": "not_analyzed"
                        },
                "be_event" : {
                        "type" : "nested",
                        "properties" : {
                            "ActiveT" : { 
                                "type" : "long",  
                                "index" : "not_analyzed" 
                            },
                        }
                    }
            }
}

Я получаю следующую ошибку.

"error" : "ElasticsearchParseException[Failed to parse content to map]; nested: JsonParseException[Unexpected character ('\"' (code 34)): was expecting comma to separate OBJECT entries\n at [Source: org.elasticsearch.common.compress.lzf.LZFCompressedStreamInput@c2f1e8d; line: 122, column: 19]]; ",
  "status" : 400

Что не так с отображением, которое я использую?


person liv2hak    schedule 07.06.2015    source источник
comment
@Val - Не могли бы вы взглянуть на этот вопрос? Благодарность   -  person liv2hak    schedule 08.06.2015
comment
ошибка довольно очевидна, содержимое подструктуры bent не является допустимым JSON, то есть вам нужно удалить обратную косую черту, чтобы \"ActiveT\": 6 просто читалось "ActiveT": 6, и сделать то же самое для всех других свойств в этой структуре. Более того, ваше сопоставление на самом деле не соответствует вашему документу в том смысле, что 1) некоторые свойства не называются одинаково (User против Username), 2) у вас есть оборванная запятая в be_event, что также делает ваше сопоставление недействительным JSON, и 3) вам не хватает закрывающего апострофа в конце команды POST   -  person Val    schedule 08.06.2015