博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 查询 elasticsearch 常用方法(Query DSL)
阅读量:6982 次
发布时间:2019-06-27

本文共 4997 字,大约阅读时间需要 16 分钟。

hot3.png

1. 建立连接

from elasticsearch import Elasticsearches = Elasticsearch(["localhost:9200"])

2. 查询所有数据

# 方式1:es.search(index="index_name", doc_type="type_name") # 方式2:body = {    "query":{        "match_all":{}    }}es.search(index="index_name", doc_type="type_name", body=body)

3. 等于查询,term与terms

# term: 查询 xx = “xx”body = {    "query":{        "term":{            "name":"python"        }    }}# 查询name="python"的所有数据es.search(index="index_name",doc_type="type_name",body=body)# terms: 查询 xx = “xx” 或 xx = “yy”body = {    "query":{        "terms":{            "name":[                "ios","android"            ]        }    }}# 查询出name="ios"或name="android"的所有数据es.search(index="index_name",doc_type="type_name",body=body)

4. 包含查询,match与multi_match

# match: 匹配name包含"python"关键字的数据body = {    "query":{        "match":{            "name":"python"        }    }}# 查询name包含python关键字的数据es.search(index="index_name",doc_type="type_name",body=body) # multi_match: 在name和addr里匹配包含深圳关键字的数据body = {    "query":{        "multi_match":{            "query":"深圳",            "fields":["name", "addr"]        }    }}# 查询name和addr包含"深圳"关键字的数据es.search(index="index_name",doc_type="type_name",body=body)

5. ids

body = {    "query":{        "ids":{            "type":"type_name",            "values":[                "1","2"            ]        }    }}# 搜索出id为1或2的所有数据es.search(index="index_name",doc_type="type_name",body=body)

6. 复合查询bool

bool有3类查询关系,must(都满足),should(其中一个满足),must_not(都不满足)

body = {    "query":{        "bool":{            "must":[                {                    "term":{                        "name":"python"                    }                },                {                    "term":{                        "age":18                    }                }            ]        }    }}# 获取name="python"并且age=18的所有数据es.search(index="index_name",doc_type="type_name",body=body)

7. 切片式查询

body = {    "query":{        "match_all":{}    }    "from":2    # 从第二条数据开始    "size":4    # 获取4条数据}# 从第2条数据开始,获取4条数据es.search(index="index_name",doc_type="type_name",body=body)

8. 范围查询

body = {    "query":{        "range":{            "age":{                "gte":18,       # >=18                "lte":30        # <=30            }        }    }}# 查询18<=age<=30的所有数据es.search(index="index_name",doc_type="type_name",body=body)

9. 前缀查询

body = {    "query":{        "prefix":{            "name":"p"        }    }}# 查询前缀为"赵"的所有数据es.search(index="index_name",doc_type="type_name",body=body)

10. 通配符查询

body = {    "query":{        "wildcard":{            "name":"*id"        }    }}# 查询name以id为后缀的所有数据es.search(index="index_name",doc_type="type_name",body=body)

11. 排序

body = {    "query":{        "match_all":{}    }    "sort":{        "age":{                 # 根据age字段升序排序            "order":"asc"       # asc升序,desc降序        }    }}# 多字段排序,注意顺序!写在前面的优先排序body = {    "query":{        "match_all":{}    }    "sort":[{        "age":{                # 先根据age字段升序排序            "order":"asc"      # asc升序,desc降序        }    },{        "name":{               # 后根据name字段升序排序            "order":"asc"      # asc升序,desc降序        }    }],}

12. filter_path, 响应过滤

# 只需要获取_id数据,多个条件用逗号隔开es.search(index="index_name",doc_type="type_name",filter_path=["hits.hits._id"]) # 获取所有数据es.search(index="index_name",doc_type="type_name",filter_path=["hits.hits._*"])

13. count, 执行查询并获取该查询的匹配数

# 获取数据量es.count(index="index_name",doc_type="type_name")

14. 度量类聚合

14.1. 获取最小值
body = {    "query":{        "match_all":{}    },    "aggs":{                        # 聚合查询        "min_age":{                 # 最小值的key            "min":{                 # 最小                "field":"age"       # 查询"age"的最小值            }        }    }}# 搜索所有数据,并获取age最小的值es.search(index="index_name",doc_type="type_name",body=body)
14.2. 获取最大值
body = {    "query":{        "match_all":{}    },    "aggs":{                        # 聚合查询        "max_age":{                 # 最大值的key            "max":{                 # 最大                "field":"age"       # 查询"age"的最大值            }        }    }}# 搜索所有数据,并获取age最大的值es.search(index="index_name",doc_type="type_name",body=body)
14.3. 获取和
body = {    "query":{        "match_all":{}    },    "aggs":{                        # 聚合查询        "sum_age":{                 # 和的key            "sum":{                 # 和                "field":"age"       # 获取所有age的和            }        }    }}# 搜索所有数据,并获取所有age的和es.search(index="index_name",doc_type="type_name",body=body)
14.4. 获取平均值
body = {    "query":{        "match_all":{}    },    "aggs":{                        # 聚合查询        "avg_age":{                 # 平均值的key            "sum":{                 # 平均值                "field":"age"       # 获取所有age的平均值            }        }    }}# 搜索所有数据,获取所有age的平均值es.search(index="index_name",doc_type="type_name",body=body)

15. from、size

  1. from:从“第几条”开始查询
  2. size:查询多少条
body = {    "query":{        "match_all":{}    },    "size":"50",    "from":"0"}

原文连接:

--Posted from Rpc

转载于:https://my.oschina.net/remainsu/blog/3027340

你可能感兴趣的文章
[Winform]WebKit.Net使用
查看>>
17 HTTP编程入门
查看>>
Eclipse安装Jetty插件(Web容器)
查看>>
js使用defineProperty的一些坑
查看>>
python 识别验证码
查看>>
【转】android IDE——通过DDMS查看app运行时所占内存情况
查看>>
运维常说的 5个9、4个9、3个9 的可靠性,到底是什么???
查看>>
[SQL] 函数整理(T-SQL 版)
查看>>
Java+大数据开发——HDFS详解
查看>>
.NET Core 使用RabbitMQ
查看>>
ArcGIS AO中控制图层中要素可见状态的总结
查看>>
Win10的UWP之标题栏的返回键(一)
查看>>
LINUX中常用操作命令
查看>>
几种常见随机过程
查看>>
【计算机网络】聊一聊那些常见的网络通信的性能指标
查看>>
mysql5.7 启动报发生系统错误2
查看>>
多进程单线程模型与单进程多线程模型之争
查看>>
spring boot实战(第二篇)事件监听
查看>>
Golang源码探索(一) 编译和调试源码
查看>>
cocos2d-x JS 随机数
查看>>