es中mapping_parsing_exception处理一例

2018.12.11补充:
python中null数据有两种,一种是numpy格式的NaN,一种是python格式的None.
操作中发现有些wind数据是nan,但是类型确实float,这种数据存入es的时候就报错。这个时候需要把nan转换为None,即类型转为Nonetype。然后再存就没问题了。

def set_nan_to_none(self, the_dict):
    """将dict中的nan改为None"""
    for i in the_dict:
        if pd.isna(the_dict[i]):
            the_dict[i] = None
    return the_dict

最近在测试程序的时候,发现无法把一个dict数据写入es,报下面这个错误,百思不得其解。


image.png

在百度多次都没有现成的解决方案之后,开始自己琢磨可能出现的问题。
提示我解析‘short_company_name’这个字段失败,怀疑是编码问题。因为以前遇到过json数据编码的问题。但是看了半天es.index()函数里面都没有提示有设置编码。遂放弃。

继续百度‘mapping_parsing_exception’,看到一个说type的问题。
于是用es.indices.get(index=index_name)查看了下各个字段的type,发现‘short_company_name’这个字段的type是long,百度告诉这个是一个64位的int。

继续百度,看到有人吐槽,es里面某个字段要是改的话就要整列全部改,想只改单个的是不可以的。于是把原始数据重新处理了下,type改为‘text’,再次执行就成功了。

你可能感兴趣的:(es中mapping_parsing_exception处理一例)