python 操作 Elasticsearch(二)

python 操作 Elasticsearch(二)

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)

在这里插入图片描述
执行之后,可以看到,标签已经删除了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会点东西的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值