python elasticsearch dsl_python 查询 elasticsearch 常用方法(Query DSL)

1. 建立连接

from elasticsearch import Elasticsearch

es = 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

from:从“第几条”开始查询

size:查询多少条

body = {

"query":{

"match_all":{}

},

"size":"50",

"from":"0"

}

原文连接:

python查询elasticsearch(Query DSL) 实例

import datetime import sys import getopt import hashlib from elasticsearch import Elasticsearch &quo ...

ElasticSearch的 Query DSL 和 Filter DSL

Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. Query DSL 与 Filter DSL DSL查询语言中存在两种:查询DSL(q ...

python 使用 elasticsearch 常用方法(聚合)

#记录聚合查询方法 from elasticsearch import Elasticsearch es = Elasticsearch(['xx.xx.xx.xx:9200']) #获取最小的年龄r ...

python 使用 elasticsearch 常用方法(检索)

#记录es查询等方法 #清楚数据 curl -XDELETE http://xx.xx.xx.xx:9200/test6 #初始化数据 curl -H "Content-Type: appl ...

python 使用 elasticsearch 常用方法(索引)

#记录管理索引等方法 from elasticsearch import Elasticsearch es = Elasticsearch(['xx.xx.xx.xx:9200']) #获取文档内容r ...

Elasticsearch通关教程(五):如何通过SQL查询Elasticsearch

前言 这篇博文本来是想放在全系列的大概第五.六篇的时候再讲的,毕竟查询是在索引创建.索引文档数据生成和一些基本概念介绍完之后才需要的.当前面的一些知识概念全都讲解完之后再讲解查询是最好的,但是最近公司 ...

Elasticsearch&lpar;入门篇&rpar;——Query DSL与查询行为

ES提供了丰富多彩的查询接口,可以满足各种各样的查询要求.更多内容请参考:ELK修炼之道 Query DSL结构化查询 Query DSL是一个Java开源框架用于构建类型安全的SQL查询语句.采用A ...

Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述

目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...

Elasticsearch Query DSL查询入门

本篇为学习DSL时做的笔记,适合ES新手,大佬请略过~ Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活.更精确.更 ...

随机推荐

【腾讯Bugly干货分享】QFix探索之路—手Q热补丁轻量级方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值