es BadRequestError问题情况
- 问题
- bug信息
- 引起错误的代码
- bug分析
- 完整代码
问题
bug信息
elasticsearch.BadRequestError: BadRequestError(400, 'mapper_parsing_exception', 'failed to parse')
引起错误的代码
a.save()
bug分析
一开始我以为是版本问题,但是按照配置的字段属性都是正确的,如下:
# 创建document对象
class Auhtor(Document):id = Keyword(),name = Text(),dynasty = Integer(),life = Text(),path = Text(),url = Text()class Index:name = "author"
然后查看了一下我的数据,发现有一个NaN数据类型,这个数据类型在es中是不存在的
id 1
name 武夷君
dynasty 1
life 武夷君又称武夷王、武夷显道真君,是中国民间信奉的神仙之一,属于中国福建武夷山的山神、乡土神。...
path NaN
url https://www.gushicimingju.com//shiren/wuyijun/
所以将NaN的数据进行删除
df.fillna('',inplace=True)
再次运行,错误消失了
完整代码
from elasticsearch_dsl import (connections,Index,Document,Text,Integer,Keyword)
import pandas as pd
# 连接es
conn = connections.create_connection(hosts=["http://localhost:9200"])# 创建document对象
class Auhtor(Document):id = Keyword(),name = Text(),dynasty = Integer(),life = Text(),path = Text(),url = Text()class Index:name = "author"# 判断索引是否存在
if Index('author').exists():Index('author').delete()df = pd.read_csv('./data/author_msg.csv')
df.fillna('',inplace=True)
a_df = df.iloc[0,:]
print(a_df)a = Auhtor(id = a_df['id'],name = a_df['name'],dynasty = a_df.dynasty,life = a_df.life,path = a_df.path,url = a_df.url,
)
# print(a.url)
a.save()