Python Elasticsearch api,组合过滤器,term过滤器,正则查询 ,match查询,获取最近一小时的数据
Python Elasticsearch api
安装API
- pip install elasticsearch
建立es连接
- from elasticsearch import Elasticsearch
- es = Elasticsearch([{'host':'10.10.13.12','port':9200}])
数据检索功能
- es.search(index='logstash-2015.08.20', q='http_status_code:5* AND server_name:"web1"', from_='124119')
常用参数
index - 索引名
q - 查询指定匹配 使用Lucene查询语法
from_ - 查询起始点 默认0
doc_type - 文档类型
size - 指定查询条数 默认10
field - 指定字段 逗号分隔
sort - 排序 字段:asc/desc
body - 使用Query DSL
scroll - 滚动查询
统计查询功能
# 语法同search大致一样,但只输出统计值
- In[52]: es.count(index='logstash-2015.08.21', q='http_status_code:500')
- Out[52]:{u'_shards':{u'failed':0, u'successful':5, u'total':5}, u'count':17042}
知识扩展
滚动demo
- # Initialize the scroll
- page = es.search(
- index ='yourIndex',
- doc_type ='yourType',
- scroll ='2m',
- search_type ='scan',
- size =1000,
- body ={
- # Your query's body
- })
- sid = page['_scroll_id']
- scroll_size = page['hits']['total']
- # Start scrolling
- while(scroll_size >0):
- print "Scrolling..."
- page = es.scroll(scroll_id = sid, scroll ='2m')
- # Update the scroll ID
- sid = page['_scroll_id']
- # Get the number of results that we returned in the last scroll
- scroll_size = len(page['hits']['hits'])
- print "scroll size: "+ str(scroll_size)
- # Do something with the obtained page
以上demo实现了一次取若干数据,数据取完之后结束,不会获取到最新更新的数据。我们滚动完之后想获取最新数据怎么办?滚动的时候会有一个统计值,如total: 5。跳出循环之后,我们可以用_from参数定位到5开始滚动之后的数据。
Query DSL
range过滤器查询范围
gt: > 大于
lt: < 小于
gte: >= 大于或等于
lte: <= 小于或等于
- "range":{
- "money":{
- "gt":20,
- "lt":40
- }
- }
bool组合过滤器
must:所有分句都必须匹配,与 AND 相同。
must_not:所有分句都必须不匹配,与 NOT 相同。
should:至少有一个分句匹配,与 OR 相同。
- {
- "bool":{
- "must":[],
- "should":[],
- "must_not":[],
- }
- }
term过滤器
term单过滤
- {
- "terms":{
- "money":20
- }
- }
terms复数版本,允许多个匹配条件
- {
- "terms":{
- "money": [20,30]
- }
- }
正则查询
- {
- "regexp": {
- "http_status_code": "5.*"
- }
- }
match查询
match 精确匹配
- {
- "match":{
- "email":"123456@qq.com"
- }
- }
multi_match 多字段搜索
- {
- "multi_match":{
- "query":"11",
- "fields":["Tr","Tq"]
- }
- }
demo
获取最近一小时的数据
- {'query':
- {'filtered':
- {'filter':
- {'range':
- {'@timestamp':{'gt':'now-1h'}}
- }
- }
- }
- }
条件过滤查询
- {
- "query":{
- "filtered":{
- "query":{"match":{"http_status_code":500}},
- "filter":{"term":{"server_name":"vip03"}}
- }
- }
- }
Terms Facet 单字段统计
- {'facets':
- {'stat':
- {'terms':
- {'field':'http_status_code',
- 'order':'count',
- 'size':50}
- }
- },
- 'size':0
- }
一次统计多个字段
- {'facets':
- {'cip':
- {'terms':
- {'fields':['client_ip']}},
- 'status_facets':{'terms':{'fields':['http_status_code'],
- 'order':'term',
- 'size':50}}},
- 'query':{'query_string':{'query':'*'}},
- 'size':0
- }
多个字段一起统计
- {'facets':
- {'tag':
- {'terms':
- {'fields':['http_status_code','client_ip'],
- 'size':10
- }
- }
- },
- 'query':
- {'match_all':{}},
- 'size':0
- }
数据组装
以下是kibana首页的demo,用来统计一段时间内的日志数量
- {
- "facets": {
- "0": {
- "date_histogram": {
- "field": "@timestamp",
- "interval": "5m"
- },
- "facet_filter": {
- "fquery": {
- "query": {
- "filtered": {
- "query": {
- "query_string": {
- "query": "*"
- }
- },
- "filter": {
- "bool": {
- "must": [
- {
- "range": {
- "@timestamp": {
- 'gt': 'now-1h'
- }
- }
- },
- {
- "exists": {
- "field": "http_status_code.raw"
- }
- },
- # --------------- -------
- # 此处加匹配条件
- ]
- }
- }
- }
- }
- }
- }
- }
- },
- "size": 0
- }
如果想添加匹配条件,在以上代码标识部分加上过滤条件,按照以下代码格式即可
- {
- "query": {
- "query_string": {"query": "backend_name:baidu.com"}
- }
- },
Python Elasticsearch api,组合过滤器,term过滤器,正则查询 ,match查询,获取最近一小时的数据的更多相关文章
- Python Elasticsearch api
描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下面介绍了利用Python API接口进行数据查询,方便 ...
- Elasticsearch学习系列之term和match查询
lasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为book ...
- Elasticsearch学习系列之term和match查询实例
Elasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为boo ...
- asp.net mvc ,asp.net mvc api 中使用全局过滤器进行异常捕获记录
MVC下的全局异常过滤器注册方式如下:标红为asp.net mvc ,asp.net mvc api 注册全局异常过滤器的不同之处 using SuperManCore; using System. ...
- springCloud学习05之api网关服务zuul过滤器filter
前面学习了zuul的反向代理.负载均衡.fallback回退.这张学习写过滤器filter,做java web开发的对filter都不陌生,那就是客户端(如浏览器)发起请求的时候,都先经过过滤器fil ...
- ES 20 - 查询Elasticsearch中的数据 (基于DSL查询, 包括查询校验match + bool + term)
目录 1 什么是DSL 2 DSL校验 - 定位不合法的查询语句 3 match query的使用 3.1 简单功能示例 3.1.1 查询所有文档 3.1.2 查询满足一定条件的文档 3.1.3 分页 ...
- ELK 学习笔记之 elasticsearch bool组合查询
elasticsearch bool组合查询: 相当于sql:where _type = 'books' and (price = 500 or title = 'bigdata') Note: mu ...
- Elasticsearch API响应的一些常用选项
我们可以点击Elasticsearch API以获取所需的响应,但是如果要修改API响应,以便我们更改显示格式或过滤掉某些字段,然后我们可以将这些选项与查询一起应用. 有一些常见的选项可以适用于API ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(01过滤器简介)
过滤器 什么是过滤器? 过滤器(Filter) 主要的作用大致可以理解为把我们的附加逻辑注入到MVC框架的请求处理. 在ASP.NET MVC的请求处理中一种有19个管道事件分别是 BeginRequ ...
随机推荐
- 【Docker】docker常用命令
1.批量删除无tag镜像 docker images|grep none|awk '{print $3}'|xargs docker rmi 2.以特权模式运行容器 docker run --priv ...
- Oracle数据库中,sql中(+)(-)的含义
SELECT *FROM TABLE1 A,TABLE2 B WHERE A.ID(+)=B.ID; 右连接=RIGHT JOIN SELECT *FROM TABLE1 A,TABLE2 B WHE ...
- php开发面试题---jquery和vue对比(整理)
php开发面试题---jquery和vue对比(整理) 一.总结 一句话总结: jquery的本质是更方便的选取和操作DOM对象,vue的本质是数据和页面分离 反思的回顾非常有用,因为决定了我的方向和 ...
- (5)C++ 循环和判断
循环 一.for循环 ; i < ; i++) { cout << "abc"<< endl; } 或 ; i; i--) { cout <&l ...
- bash arithmatic
Arithmetic in bash is done with $ and double parentheses: echo "$(($num1+$num2))" Or $ and ...
- WinDows应急响应基础
文件排查 开机启动有无异常文件 msconfig 敏感的文件路径 %WINDIR% %WINDIR%\SYSTEM32\ %TEMP% %LOCALAPPDATA% %APPDATA% 用户目录 新建 ...
- Rust <10>:宏导出、导入
源 crate 中使用 #[macro_export] 属性标记的宏,调用者可在导入此 crate 时添加 #[macro_use] 属性使用. 没有 #[macro_export] 的宏,外部不可见 ...
- 数据可视化----matplotlib.pylot
一.输入具体数 plt.plot([3,1,4,5,2]) #自动生成y轴 plt.ylabel("Grade") #y轴的标签 plt.savefig('test1',dpi=6 ...
- VS2008中所有快捷键
转载自:http://itfocus.diandian.com/post/2011-09-16/5091994 微软开发环境的可视化界面做的很全面,几乎所有的操作都可以通过可视化界面完成,但是你是否在 ...
- jmeter 不同线程组之间传递变量1
一 采用全局变量在不同线程组之间传递变量的坑 ${__setProperty(newcompanyId,${companyId},)}; 不采用全局变量传递参数,请求报文格式如下: 正确的报文: {& ...