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"
}
原文连接:
- https://blog.csdn.net/y472360651/article/details/76652021
- https://blog.csdn.net/m_z_g_y/article/details/82628972
python 查询 elasticsearch 常用方法(Query DSL)的更多相关文章
- 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 ... 
- DSL是什么?Elasticsearch的Query DSL又是什么?
		1.DSL简介 DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言.而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证(备注:G ... 
- 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(入门篇)——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 ... 
随机推荐
- LINUX 蓝牙耳机的配置方法
			由于经常使用SKYPE聊天打电话,一直觉得被拴在电脑前面不是很自由,终于在一个周末,一激动买了一个蓝牙耳机.经过几天的努力在Linux/Debian上用了起来,现在就把这个配置过程和大家分享. 第一 ... 
- Win8Metro(C#)数字图像处理--2.27图像加法运算
			原文:Win8Metro(C#)数字图像处理--2.27图像加法运算  [函数名称] 图像加法函数AddProcess(WriteableBitmap src, WriteableBitmap a ... 
- WPF 窗体边框处理
			一般做wpf窗口时都不会使用默认的标题栏等,会把他隐藏掉 此时设置以下属性 WindowStyle.AllowsTransparency.ResizeMode 中的两个或三个都能达到目的. 有一种场景 ... 
- oracle 12c连接pdb
			12c中,如何连接pluggable database: 使用默认的service连接pdb,创建pdb之后,在监听中自动添加以pdb为名的service: 用户在cluster中创建service, ... 
- MinGW 编译 libsndfile-1.0.25(只要有 MSYS,./configure make make install 就行了)
			最近做的一个项目需要读写 wav 文件.在网上找到 libsndfile 刚好满足我的需要.但是编译的时候遇到了点小麻烦,这里记录一下编译的过程,免得下次再编译时忘记了. 因为是在编译完成若干天后写的 ... 
- MinGW版Qt如何搭建lua环境?(详细步骤)
			操作系统是windows,lua是Lua for Windows 5.1.4包含了这三个头文件 <ignore_js_op> 在.pro里加了includepath: <ignor ... 
- VC 函数调用的 汇编代码 浅析
			摘要:主要谈谈vc里面函数调用汇编成汇编代码的情形,首先针对之前的一个小程序,说说vc编译器的优化. 例子程序: #include <iostream>using namespace st ... 
- 模态对话框测试 MFC中的模态对话框与非模态对话框
			http://blog.csdn.net/u010839382/article/details/52972427 http://blog.csdn.net/u010839382/article/det ... 
- JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember(转载)
			原文地址:http://sporto.github.io/.../comparison-angular-backbone-can-ember/ 原文作者:Sebastian Porto @Twitte ... 
- linux 磁盘控件找到大文件
			df -lh Used:已经使用的空间 Avail:可以使用的空间 Mounted on:挂载的目录 然后找到大文件 du是linux下用看查看磁盘的命令 下面我们先一个目录的来查看空间占用情况 du ... 
