python Elasearch 查询

python es 基本查询

pip install elasticsearch 

index = 'my_test_index'   # 自定义index名称

本文涉及到 条数size, 匹配条件 match, exists, 范围 range, in, 排序 sort,返回结果过滤 includes, 求和 sum, 统计 count

1. 基本查询体结构

     查询所有, 默认返回10条数据

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')


body = {
            "query": {"match_all": {}}
      }


search_result = es.search(index=index, body=body)

2. 指定返回的条数(size)

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')


body = {
            "query": {"match_all": {}}
      }


search_result = es.search(index=index, body=body, size=100)

3.指定匹配条件 (match)

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')

body = {
            "query": {
                "bool": {
                    "must": [
                        {"match": {"id": 11}},                  # 匹配条件
                        {"match": {"is_deleted": 0}},
                        {"exists": {"field": "age"}}   # age字段的值不为空
                    ]
                },
            },
        }

search_result = es.search(index=index, body=body, size=10000) 

4. 查询范围控制 (range)

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')

body = {
            "query": {
                "bool": {
                    "must": [
                        {"match": {"is_deleted": 0}},
                    ],
                    "filter": [
                        {"range": {"creation_date": {"gte": starttime, "lte": lasttime}}}   # 范围查询
                    ]
                },
            }
        }

search_result = es.search(index=index, body=body, size=10000)  

5.字段的值为指定某几个值(in)

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')

body = {
           "query": {
                "bool": {
                    "must": [
                        {"match": {"is_deleted": 0}},
                        {"exists": {"field": "age"}},
                    ],
                    "filter": [
                                {"terms": {"age": [18, 19]}},   # age值为18或19                       
                    ]
                },
            },
        }
search_result = es.search(index=index, body=body, size=10000)

 

6.排序(sort)

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')

body = {
           "query": {
                "bool": {
                    "must": [
                        {"match": {"project_id": 11}}
                     ]
                  },
            },
            "sort": [{"creation_date": {"order": "desc"}}]    # 排序,按照creation_date倒叙
        }

search_result = es.search(index=self.agile_issue_log_index, body=body, size=10000) 

7.查询返回结果中字段过滤(includes)

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')

body = {
            "_source": {
                "includes": ["id", "name"],   # 设置只返回指定字段
                "excludes": []
            },
            "query": {"match_all": {}}
        }
search_result = es.search(index=index, body=body, size=10000)

8.求和(sum)

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')

sum_filed = "sum_ages"   # 自定义求和后的字段名
body = {
            "query": {"match_all":{}},
            "aggs": {
                sum_filed: {"sum": {"field": "age"}},   # 对age值求和
            },
        }
search_result = es.search(index=index, body=body)
sum_ages = search_result["aggregations"][sum_filed]["value"]

9.统计记录条目数(count)

from elasticsearch.client import Elasticsearch
 
es = Elasticsearch('127.0.0.1:90201')
 
body = {
            "query": {"match_all":{}},
        }
search_result = es.count(index=index, body=body)

 

结合1-7所有的查询体结构如下:

from elasticsearch.client import Elasticsearch

es = Elasticsearch('127.0.0.1:90201')

body = {
            "_source": {
                "includes": ["id", "name"],
                "excludes": []
            },
            "query": {
                "bool": {
                    "must": [
                        {"match": {"is_deleted": 0}},
                        {"exists": {"field": "age"}},
                    ],
                    "filter": [
                                {"terms": {"age": [18, 19]}},                        
                                {"range": {"creation_date": {"gte": starttime, "lte": lasttime}}}
                    ]
                },
            },
            "sort": [{"creation_date": {"order": "desc"}}]
        }
search_result = es.search(index=self.agile_issue_log_index, body=body, size=10000)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值