es BadRequestError问题情况
问题
bug信息
elasticsearch.BadRequestError: BadRequestError(400, 'mapper_parsing_exception', 'failed to parse')
引起错误的代码
python
a.save()
bug分析
一开始我以为是版本问题,但是按照配置的字段属性都是正确的,如下:
python
# 创建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的数据进行删除
python
df.fillna('',inplace=True)
再次运行,错误消失了
完整代码
python
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()