python elasticsearch update by query

  1. 创建索引以及添加数据
PUT test
{
  "mappings": {
    "properties": {
      "test":{
        "type": "nested"
    }
  }
}}


GET test/_mapping


PUT test/_doc/1
{
  "test":{"name":"ellis","age":100}
}

  1. elasticsearch包
from elasticsearch import Elasticsearch
conn = Elasticsearch(hosts=['192.168.214.133'],port=31200,http_auth="elastic:ellischen")

update_by_query = {
  "query": {
    "nested": {
      "path": "test",
      "query": {
        "term": {
          "test.name": {
            "value": "ellis"
          }
        }
      }
    }
  },
  "script": {
    "source": "ctx._source['test']['age']+=1",
    "params": {"age":101}, 
    "lang": "painless"
  }
}


conn.update_by_query(index='test',body=update_by_query)
  1. elasticsearch-dsl包
from elasticsearch_dsl import connections
from elasticsearch_dsl import Search
from elasticsearch_dsl import Q as esQ
from elasticsearch_dsl import UpdateByQuery
conn = connections.create_connection(hosts=['192.168.214.133'],port=31200,http_auth="elastic:ellischen")
source = "ctx._source['test']['age']=params.age"
params = {"age":110}
query_body=esQ('nested',**{"path":'test',"query":esQ('term',**{"test.name":{"value":"ellis"}})})
update_by_query = UpdateByQuery().using(conn).index('test').query(query_body).script(source=source,params=params)

update_by_query.execute()
  1. from_dict 方法
from elasticsearch_dsl import connections
from elasticsearch_dsl import Search
from elasticsearch_dsl import Q as esQ
from elasticsearch_dsl import UpdateByQuery
conn = connections.create_connection(hosts=['192.168.214.133'],port=31200,http_auth="elastic:ellischen")
# source = "ctx._source['test']['age']=params.age"
# params = {"age":110}
# query_body=esQ('nested',**{"path":'test',"query":esQ('term',**{"test.name":{"value":"ellis"}})})
# update_by_query = UpdateByQuery().using(conn).index('test').query(query_body).script(source=source,params=params)

# update_by_query.execute()

update_by_query = {
  "query": {
    "nested": {
      "path": "test",
      "query": {
        "term": {
          "test.name": {
            "value": "ellis"
          }
        }
      }
    }
  },
  "script": {
    "source": "ctx._source['test']['age']+=1",
    "params": {"age":101}, 
    "lang": "painless"
  }
}
search = UpdateByQuery().from_dict(update_by_query).using(conn).index('test')
search.execute()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值