1、添加或更新标签
使用python对es的某一索引的列进行添加标签操作。
from elasticsearch import Elasticsearch
from elasticsearch import helpers
es = Elasticsearch(['你的elasticsearch的外网连接'], http_auth=('数据库的用户名', '密码'),timeout=60,max_retries=10,retry_on_timeout=True)
#向demo索引中添加或更新数据
tags = {
"date": "2020-09-27 17:45:17",
"label": "2020年9月",
"id": "40" ,
"value":"9月"
}
updateBody = {
"query": {
"bool": {
"filter": {
"terms": {
"Id": id
}
}
}
},
"script": {
"source": """
if (ctx._source.tags == null)
{
ctx._source.tags=params.tag1
}
else
{
if(ctx._source.tags.contains(params.tag2)){
ctx.op = 'noop'
}
else{
int flag = 0;
for(int i = 0 ; i < ctx._source.tags.length;i++)
{
if(ctx._source.tags[i].label == params.tag2.label){
ctx._source.tags[i] = params.tag2;
flag++
}
}
if(flag == 0){ctx._source.tags.add(params.tag2)}
}
}
""",
"params": {
"tag1": [tags],
"tag2": tags
},
"lang": "painless"
}
}
es.update_by_query(index= "demo", doc_type = '_doc', body = updateBody)
执行这段代码之后,我们去看看demo索引,看看demo索引是否多了一个tags列,然后看看Id为1和2的tags列是否已经打上标签了。
由上图我们可以看到,tags标签列已成功打上了标签。
2、删除标签
# tags要完全匹配要删除的标签,不然删除不掉
#(还有就是,只能删一遍所有符合条件的标签,如果有加重复的几次标签,就执行几次这个删标签,直到报错就可以确认删除完毕)
tags = {
"date": "2020-09-27 17:45:17",
"label": "2020年9月",
"id": "40" ,
"value":"9月"
}
delete_BODY = {
"script": {
"source": "ctx._source.tags.remove(ctx._source.tags.indexOf(params.target_label))",
"lang": "painless",
"params": {
"target_label": tags
}
},
"query": {
"exists": {
"field": "tags"
}
}
}
es.update_by_query(index='demo', doc_type = '_doc',body=delete_BODY)
执行之后,可以看到,标签已经删除了。