csv文件有2个文本字段name和address,在mapping的时候,这两个字段类型设置为了"string",就无法在painless中通过doc['name'].value和doc['address'].value获取了。
将其设置为"keyword",就可以了。
完整的python代码:
from elasticsearch import helpers,Elasticsearch
from subprocess import call
import csv
'''----people.csv----
name,birth,age,height,address
ZhangSan,19800102112233,39,172.4,Chaoyang
LiSi, 19880102030405,31,181.2,Jingyue
WangWu,19881111020202,31,142.3,Linhe
'''
csvFile=r"people.csv"
es=Elasticsearch()
mapping={
"mappings":
{
'doc_name_people':
{
"properties":
{
"name":{"type": "keyword"},
"birth":{"type": "date","format":"yyyyMMddHHmmss"},
"age":{"type": "integer"},
"height":{"type": "float"},
"address":{"type": "string"}
}
}
}
}
es.indices.create(index='idx_people',body=mapping)
with open(csvFile) as f:
reader=csv.DictReader(f)
helpers.bulk(es,reader,index='idx_people',doc_type='doc_name_people')
在上面的例子中,在painless中如果使用doc['name'].value,就可以正常获取出内容,但是如果用doc['address'].value,就无法获取。