【发布时间】:2018-12-16 20:08:52
【问题描述】:
我正在使用 kibana 和 Elasticsearch 5.1.1 版和 python 3.6 版。
我已经这样创建了我的索引 put_books
添加用户的功能就是这个:
def add_user(first_name, last_name, age, mail):
doc = {"first_name": "" + first_name, "last_name": "" + last_name, "age": age, "email": "" + mail}
global id_user
res = es.index(index="books", doc_type="user", id=id_user, body=doc)
id_user += 1
print(res['result'])
并添加首选项:
def add_preferences(preferences, i):
doc = es.get(index="books", doc_type="user", id=id_book)
res = es.update(index="books", doc_type="user", id=i, body={'doc':{"keyword_preferences": preferences}})
我的问题在这里:当我想添加首选项时,它会成功,但如果我想再次添加首选项,它会替换它:
id_user = 1
nom = "nom_1"
prenom = "prenom_1"
age = 45
email = "adresse_mail_1"
add_user(prenom, nom, age, email)
add_preferences("comique", 1)
add_preferences("horreur", 1)
get_user(1)
结果是:
updated
{'first_name': 'prenom_1', 'last_name': 'nom_1', 'age': 45, 'email': 'adresse_mail_1', 'keyword_preferences': 'horreur'}
最后,解决方案是:
POST /books/user/1/_update
{
"script" : {
"inline": "ctx._source.keyword_preferences += params.preference",
"lang": "painless",
"params" : {
"preference" : ["comique"]
}
}
}
【问题讨论】:
-
您的预期结果是什么?
-
我的预期结果是:更新{'first_name': 'prenom_1', 'last_name': 'nom_1', 'age': 45, 'email': 'addresse_mail_1', 'keyword_preferences': { '喜剧','恐怖'}}
-
你不能像上面那样保存keyword_preferences。您可以将数据保存在字典列表中,例如
{ 'keyword_preferences': [{"preferences": "comique"},{"preferences": "horreur"}]}。更多信息请关注link。 -
我试过 res = es.update(index="books", doc_type="user", id=i, body={'doc': {'keyword_preferences': [{"preferences" :首选项}]}}),但我现在有: TransportError(400, 'mapper_parsing_exception', 'failed to parse [keyword_preferences]' 当我修改映射时它不会改变
-
首先,您需要为
keyword_preferrences创建映射。然后索引到它。
标签: python-3.x append field elasticsearch-5 kibana-5