Elasticsearch MapperParsingException

时间:2015-10-12 13:18:56

标签: elasticsearch

我正在尝试将以下数据索引到elasticsearch,

{
"_id": "5619578c1983757a72efef15",
"aseg": {},
"cs": {
    "source": "None",
    "ss": "In Transit",
    "sr": "Weight Captured",
    "act": "+B",
    "pid": "BAG21678106",
    "st": "UD",
    "dest": "Bharatpur_DC (Rajasthan)",
    "u": "J",
    "sl": "Jaipur_Hub (Rajasthan)",
    "ud": "2015-10-12T14:59:44.270000",
    "sd": "2015-10-12T14:59:44.270000"
},

"nsl": [
    {
        "dt": [
            2015,
            10,
            10
        ],
        "code": "X-PPONM"
    },
    {
        "dt": [
            2015,
            10,
            11
        ],
        "code": "X-UCI"
    },
]
}

但作为回报我收到此错误

MapperParsingException[failed to parse [cs.nsl]]; nested: ElasticsearchIllegalArgumentException[unknown property [dt]];

我检查了映射,映射是正确的,nsl嵌套在cs dict中的映射与根级别的nsl不同。

            "cs": {
            "properties": {
                "act": {
                    "type": "string"
                },
                "add": {
                    "type": "string"
                },
                "asr": {
                    "type": "string"
                },
                "bucket": {
                    "type": "string"
                },
                "dest": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "dwbn": {
                    "type": "string"
                },
                "lcld": {
                    "type": "string"
                },
                "lat": {
                    "type": "string"
                },
                "lon": {
                    "type": "string"
                },
                "loc": {
                    "type": "double"
                },
                "nsl": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "ntd": {
                    "type": "date",
                    "format": "dateOptionalTime"
                },
                "pbs": {
                    "type": "string"
                },
                "pid": {
                    "type": "string"
                },
                "pupid": {
                    "type": "string"
                },
                "sd": {
                    "type": "date",
                    "format": "dateOptionalTime"
                },
                "sl": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "source": {
                    "properties": {
                        "source": {
                            "type": "string"
                        },
                        "source_id": {
                            "type": "string"
                        },
                        "source_type": {
                            "type": "string"
                        }
                    }
                },
                "sr": {
                    "type": "string"
                },
                "ss": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "st": {
                    "type": "string"
                },
                "u": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "ud": {
                    "type": "date",
                    "format": "dateOptionalTime"
                },
                "vh": {
                    "type": "string"
                }
            }
        },

和根级别的nsl映射如下

        "nsl": {
            "properties" : {
                "code" : {
                        "type" : "string",
                        "index": "not_analyzed"
                    },
                "dt" : {
                    "type" : "string",
                    "index": "not_analyzed"
                }
            }
        },

这只发生在几条记录中,其余的都正在同步。 有效载荷没有任何变化。 另外nsl是cs中的稀疏密钥。

2 个答案:

答案 0 :(得分:2)

在您的映射中,nsl如下 -

            "nsl": {
                "type": "string",
                "index": "not_analyzed"
            },

根据映射,Elasticsearch期望nsl字段的具体字符串值,但它是您提供的文档中的对象数组。 Elasticsearch一旦有了映射,就明确了。您无法将对象数据插入字符串字段。

答案 1 :(得分:1)

我在没有预设任何映射的情况下尝试了您的文档,如下所示:

{
    "aseg": {},
    "cs": {
        "source": "None",
        "ss": "In Transit",
        "sr": "Weight Captured",
        "act": "+B",
        "pid": "BAG21678106",
        "st": "UD",
        "dest": "Bharatpur_DC (Rajasthan)",
        "u": "J",
        "nsl":"foo",
        "sl": "Jaipur_Hub (Rajasthan)",
        "ud": "2015-10-12T14:59:44.270000",
        "sd": "2015-10-12T14:59:44.270000"
    },
    "nsl": [
        {
            "dt": [
                2015,
                10,
                10
            ],
            "code": "X-PPONM"
        },
        {
            "dt": [
                2015,
                10,
                11
            ],
            "code": "X-UCI"
        }
    ]
}

ES创建了映射如下:

"nsl": {
    "properties": {
        "dt": {
            "type": "long"
        },
        "code": {
            "type": "string"
        }
     }
 }

正如您所见,ES将“dt”类型设置为“long”,这是日期类型的内部表示。那么,可能需要改变那种类型吗?

此外,如果没有看到成功的文档,很难猜测,但我相信这些文档没有“dt”字段值。

当然,您可以根据自己的需要选择“not_analyzed”。