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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章