Es基础数据类型

string
字符串类型,es中最常用的类型,官方文档 比较重要的参数: index分析
analyzed(默认)
not_analyzed
no
store存储
true 独立存储
false(默认)不存储,从_source中解析
Numeric
数值类型,注意numeric并不是一个类型,它包括多种类型,比如:long,integer,short,byte,double,float,每种的存储空间都是不一样的,一般默认推荐integer和float。官方文档参考 重要的参数: index分析
not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
no
store存储
true 独立存储
false(默认)不存储,从_source中解析
date
日期类型,该类型可以接受一些常见的日期表达方式,官方文档参考。 重要的参数: index分析
not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
no
store存储
true 独立存储
false(默认)不存储,从_source中解析
format格式化
strict_date_optional_time||epoch_millis(默认)
你也可以自定义格式化内容,比如
"date": {
"type": "date",
"format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
更多的时间表达式可以参考这里
IP
这个类型可以用来标识IPV4的地址,参考官方文档 常用参数: index分析
not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
no
store存储
true 独立存储
false(默认)不存储,从_source中解析
boolean
布尔类型,所有的类型都可以标识布尔类型,参考官方文档 False: 表示该值的有:false, "false", "off", "no", "0", "" (empty string), 0, 0.0
True: 所有非False的都是true
重要的参数: index分析
not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
no
store存储
true 独立存储
false(默认)不存储,从_source中解析

Es的head插件使用

1.查看集群中的索引信息和查看索引中定义的列的类型

2.查看es是如何对某个字符串进行切分的

Es对Date类型的处理

es如何存储Date类型,它最终的输出方式都是以字符串输出,只是默认的格式是:1970-01-01T00:00:00Z ,也就是默认的 UTC 格式

所以我们在查询和添加时间类型数据的时候需要把格式手动转换成UTC格式 否则会出现时间格式转换异常

异常查询示例:

正常查询示例:

Es查询条件设置

        body = {
"query": {
"filtered": {
"filter": {
"bool":{
"must":
[
//must数组中的三个条件必须同时满足
{"term":{"jylsh": jylsh}},
{
"range": {
"@timestamp":
{
"gte": tools.strtime_to_timestamp(startTime),
"lte": tools.strtime_to_timestamp(endTime)
}
}
},
{
"bool": {
"should": [
//should数组中的条件至少需要满足一个
{"match": {"message": "SERVICE_LOG"}},
{"match": {"message": "ENTRANCE_LOG"}}
]
}
}
]
}
}
}
},
"sort": sort_dict
}

并且和或者判断

Es查询代码示例

1.需要把时间转换成unix格式的13位数的时间戳字符  精确到毫秒级

    #格式化日期字符串
def formatDate(self,timestr):
timeStruct = time.strptime(timestr, "%Y-%m-%d %H:%M:%S.%f")
strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct)
return strTime import time
t = "2017-11-24 17:30:00"
#将其转换为时间数组
timeStruct = time.strptime(t, "%Y-%m-%d %H:%M:%S")
#转换为时间戳:
timeStamp = int(time.mktime(timeStruct))
print(timeStamp)

日期字符串不同格式转换

#!/usr/bin/env python
# -*- coding: utf-8 -*- from elasticsearch import Elasticsearch
import time,datetime ####动态修改配置项目############
es = Elasticsearch("http://127.0.0.1:9200")
appname="dzgzpt-wsys"
userChoiceTime_start="2019-04-05 09:27:27.820"
userChoiceTime_end="2019-06-27 09:27:41.986" #东八区时间
nowtime=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] #计算15分钟前的时间
fifteenminAgo=(datetime.datetime.now()+datetime.timedelta(minutes=-15)).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] #计算1个小时前的时间
hourAgo=(datetime.datetime.now()+datetime.timedelta(hours=-1)).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] #计算1天前的时间
dayAgo=(datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] def strtime_to_datetime(timestr):
"""将字符串格式的时间 (含毫秒) 转为 datetime 格式
:param timestr: {str}'2016-02-25 20:21:04.242'
:return: {datetime}2016-02-25 20:21:04.242000
"""
local_datetime = datetime.datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S.%f")
return local_datetime def datetime_to_timestamp(datetime_obj):
"""将本地(local) datetime 格式的时间 (含毫秒) 转为毫秒时间戳
:param datetime_obj: {datetime}2016-02-25 20:21:04.242000
:return: 13 位的毫秒时间戳 1456402864242
"""
local_timestamp = int(time.mktime(datetime_obj.timetuple()) * 1000.0 + datetime_obj.microsecond / 1000.0)
return local_timestamp def strtime_to_timestamp(local_timestr):
"""将本地时间 (字符串格式,含毫秒) 转为 13 位整数的毫秒时间戳
:param local_timestr: {str}'2016-02-25 20:21:04.242'
:return: 1456402864242
"""
local_datetime = strtime_to_datetime(local_timestr)
timestamp = datetime_to_timestamp(local_datetime)
return timestamp def set_interval(startTime,endTime):
d1 = datetime.datetime.strptime(startTime, "%Y-%m-%d %H:%M:%S.%f")
d2 = datetime.datetime.strptime(endTime, "%Y-%m-%d %H:%M:%S.%f")
n_days = d2 - d1 days = n_days.days
year = days // 365
month = days % 365 // 30 seconds = n_days.seconds
mins = seconds // 60
hours = mins // 60 if year >=1:
return "1M"
elif month == 1:
return "12h"
elif month > 1:
return "1d"
elif days == 1:
return "30m"
elif days >=2 and days <=4:
return "1h"
elif days >= 5 and days <=12:
return "3h"
elif days >=13 and days <= 30:
return "12h"
elif hours == 1 or hours ==2:
return "1m"
elif hours >=3 and hours<5:
return "3m"
elif hours >=5 and hours<10:
return "5m"
elif hours >=10 and hours<=60:
return "10m"
elif mins>=1 and mins<=30:
return "30s"
elif mins>30 and mins <=60:
return "1m" def search_qps(startTime,endTime):
interval=set_interval(startTime,endTime)
print("interval设置为 %s" %(interval))
print("开始qps时间%s" %(startTime))
print("结束qps时间%s " %(endTime))
body={
"size": 0,
"query": {
"filtered": {
"query": {
"query_string": {
"analyze_wildcard": True,
"query": "appname:"+appname
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": strtime_to_timestamp(startTime),
"lte": strtime_to_timestamp(endTime)
}
}
}
]
}
}
}
},
"aggs": {
"res": {
"date_histogram": {
"field": "@timestamp",
"interval": "%s" %(interval),
"time_zone": "Asia/Shanghai",
"min_doc_count": 0,
"extended_bounds": {
"min": strtime_to_timestamp(startTime),
"max": strtime_to_timestamp(endTime)
}
}
}
}
} res=es.search(body=body)
print(res)
print("查询到qps总条数: %s" %(len(res["aggregations"]["res"]["buckets"]))) def search_wastetime(startTime,endTime):
print("开始延迟时间%s" % (startTime))
print("结束延迟时间%s " % (endTime))
body = {
"size": 0,
"query": {
"filtered": {
"query": {
"query_string": {
"analyze_wildcard": True,
"query": "appname:" + appname
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": strtime_to_timestamp(startTime),
"lte": strtime_to_timestamp(endTime)
}
}
}
]
}
}
}
},
"aggs": {
"avg_wastetime": {
"avg": {
"field": "waste_time"
}
}
}
}
res=es.search(body=body)
print(res) def search_abnormal(startTime,endTime):
print("开始异常统计时间%s" % (startTime))
print("结束异常统计时间%s " % (endTime))
body = {
"size": 0,
"query": {
"filtered": {
"query": {
"query_string": {
"analyze_wildcard": True,
"query": "appname:" + appname
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": strtime_to_timestamp(startTime),
"lte": strtime_to_timestamp(endTime)
}
}
}
]
}
}
}
},
"aggs": {
"res": {
"terms": {
"field": "success"
}
}
}
}
res=es.search(body=body)
reslist=res["aggregations"]["res"]["buckets"]
for re in reslist:
if re["key"] == "false":
print("统计到的异常数 %s" %(re["doc_count"])) print("---------------------15分钟内的qps总数-------------------")
search_qps(fifteenminAgo,nowtime)
print("-------------------用户设置时间段的qps总数------------------------")
search_qps(userChoiceTime_start,userChoiceTime_end)
print("*******************************************************************")
print("---------------------15分钟内的延迟平均值-------------------")
search_wastetime(fifteenminAgo,nowtime)
print("-------------------用户设置时间段的延迟平均值------------------------")
search_wastetime(userChoiceTime_start,userChoiceTime_end)
print("*******************************************************************")
print("---------------------15分钟内的异常数-------------------")
search_abnormal(fifteenminAgo,nowtime)
print("-------------------用户设置时间段的异常数------------------------")
search_abnormal(userChoiceTime_start,userChoiceTime_end)

统计数据实例

def search_test():
body={
"query" : {
"constant_score" : {
"filter" : {
"range" : {
"@timestamp":{
"gt": "now-3m"
}
}
}
}
}
}
res=es.search(body=body)
print(res) import time, datetime
def timeToZtime(time):
myTime = datetime.datetime.strptime(time, "%Y-%m-%d %H:%M:%S")
return myTime.strftime("%Y-%m-%dT%H:%M:%S.%fZ") def search_test2():
body={
"query" : {
"constant_score" : {
"filter" : {
"range" : {
"@timestamp":{
"gt": timeToZtime("2019-01-13 12:10:30"),
"lt": timeToZtime("2019-01-13 12:10:30")+"||+1M"
}
}
}
}
}
}
res=es.search(body=body)
print(res) search_test2()

时间范围查询

import time, datetime

def strtime_to_datetime(timestr):
"""将字符串格式的时间 (含毫秒) 转为 datetime 格式
:param timestr: {str}'2016-02-25 20:21:04.242'
:return: {datetime}2016-02-25 20:21:04.242000
"""
local_datetime = datetime.datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S.%f")
return local_datetime def datetime_to_timestamp(datetime_obj):
"""将本地(local) datetime 格式的时间 (含毫秒) 转为毫秒时间戳
:param datetime_obj: {datetime}2016-02-25 20:21:04.242000
:return: 13 位的毫秒时间戳 1456402864242
"""
local_timestamp = int(time.mktime(datetime_obj.timetuple()) * 1000.0 + datetime_obj.microsecond / 1000.0)
return local_timestamp def strtime_to_timestamp(local_timestr):
"""将本地时间 (字符串格式,含毫秒) 转为 13 位整数的毫秒时间戳
:param local_timestr: {str}'2016-02-25 20:21:04.242'
:return: 1456402864242
"""
local_datetime = strtime_to_datetime(local_timestr)
timestamp = datetime_to_timestamp(local_datetime)
return timestamp #调用api处理时间
def search_qps_avg(): body2={
"size": 0,
"query": {
"filtered": {
"query": {
"query_string": {
"analyze_wildcard": True,
"query": "appname:dzgzpt-wsys"
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": strtime_to_timestamp("2019-04-05 09:27:27.820"),
"lte": strtime_to_timestamp("2019-04-18 09:34:41.986")
}
}
}
]
}
}
}
},
"aggs": {
"": {
"date_histogram": {
"field": "@timestamp",
"interval": "12h",
"time_zone": "Asia/Shanghai",
"min_doc_count": 1,
"extended_bounds": {
"min": strtime_to_timestamp("2019-04-05 09:27:27.820"),
"max": strtime_to_timestamp("2019-04-18 09:34:41.986")
}
}
}
}
} body1 = {
"size": 0,
"query": {
"filtered": {
"query": {
"query_string": {
"analyze_wildcard": 'true',
"query": "appname:dzgzpt-wsys"
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": 1554427647820,
"lte": 1555551281986,
"format": "epoch_millis"
}
}
}
],
"must_not": []
}
}
}
},
"aggs": {
"": {
"date_histogram": {
"field": "@timestamp",
"interval": "12h",
"time_zone": "Asia/Shanghai",
"min_doc_count": 1,
"extended_bounds": {
"min": 1554427647820,
"max": 1555551281986
}
}
}
}
}
res=es.search(body=body2)
print(res) search_qps_avg()

python处理时间和es一致

#unix的utc标准时间
print(datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
#东八区时间
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
#计算15分钟后的时间
print((datetime.datetime.now()+datetime.timedelta(minutes=15)).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
#计算15分钟前的时间
print((datetime.datetime.now()+datetime.timedelta(minutes=-15)).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
#计算一天后的时间
print((datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
#计算1个小时后的时间
print((datetime.datetime.now()+datetime.timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]) 2019-06-04 05:37:41.564
2019-06-04 13:37:41.564
2019-06-04 13:52:41.564
2019-06-04 13:22:41.564
2019-06-05 13:37:41.564
2019-06-04 14:37:41.564

python时间计算

import datetime
d1 = datetime.datetime.strptime("2019-06-27 09:27:27.820", "%Y-%m-%d %H:%M:%S.%f")
d2 = datetime.datetime.strptime("2021-07-29 15:43:41.986", "%Y-%m-%d %H:%M:%S.%f")
n_days = d2 - d1 print("------------计算时分秒-----------------")
seconds = n_days.seconds
print("相差秒数: %s" %(seconds)) mins = seconds // 60
print("相差分钟数: %s" %(mins)) hours = mins // 60
print("相差小时数: %s" %(hours)) print("-------------计算年月日---------------------")
days=n_days.days
print("相差天数: %s" %(days)) month= days%365//30
print("相差月数: %s" %(month)) year = days // 365
print("相差年数: %s" %(year))

计算两个时间差

elasticsearch基础查询的更多相关文章

  1. elasticsearch 基础 —— 请求体查询

    请求体查询 简易 查询 -query-string search- 对于用命令行进行即席查询(ad-hoc)是非常有用的. 然而,为了充分利用查询的强大功能,你应该使用 请求体 search API, ...

  2. ELK(elasticsearch+kibana+logstash)搜索引擎(二): elasticsearch基础教程

    1.elasticsearch的结构 首先elasticsearch目前的结构为 /index/type/id  id对应的就是存储的文档ID,elasticsearch一般将数据以JSON格式存储. ...

  3. Elasticsearch 基础入门

    原文地址:Elasticsearch 基础入门 博客地址:http://www.extlight.com 一.什么是 ElasticSearch ElasticSearch是一个基于 Lucene 的 ...

  4. Elasticsearch基础知识

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口Elasticsearch是用Java开发的,并作为Apache ...

  5. ElasticSearch 基础 1

    ElasticSearch 基础=============================== 索引创建 ========================== 1. RESTFUL APIAPI 基本 ...

  6. ElasticSearch DSL 查询

    公号:码农充电站pro 主页:https://codeshellme.github.io DSL(Domain Specific Language)查询也叫做 Request Body 查询,它比 U ...

  7. HQL基础查询语句

    HQL基础查询语句 1.使用hql语句检索出Student表中的所有列 //核心代码 @Test public void oneTest() { Query query=session.createQ ...

  8. 【转】elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  9. 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(1)

    本文描述了一个系统,功能是评价和抽象地理围栏(Geo-fencing),以及监控和分析核心地理围栏中业务的表现. 技术栈:Spring-JQuery-百度地图WEB SDK 存储:Hive-Elast ...

随机推荐

  1. 修改/etc/docker/daemon.json中的log-opts配置发现无效 docker 限制日志大小

    https://colobu.com/2018/10/22/no-space-left-on-device-for-docker/ 在/etc/docker/daemon.json中修改或添加log- ...

  2. Vinagre(Gnome Remote Desktop) cannot connect to RDP Server

    In a Sudden , this client cannot be used. Tried to install kdenetwork-krdc , then found there are de ...

  3. UEditor在开发环境中正常运作,但是部署到Tomcat中却无法使用

    背景 ​ SpringBoot项目,在 JSP 中使用 UEditor 问题 ​ UEditor 在开发环境中正常运作,但是导致部署到 Tomcat 中却无法使用 原因 在开发环境中,路径不够严谨,多 ...

  4. vue之子父组件通信

    一. 子-父组件间通信: let children = {    # 定义子组件 template: `<div> <button @click="send"&g ...

  5. for循环的嵌套之打印倒三角的星星

    var str = ''; for(var i = 1; i<=10;i++) { for(var j = i; j<=10;j++) { str = str + '★' ; { str ...

  6. Computer-Hunters——项目需求分析

    Computer-Hunters--项目需求分析 前言 本次作业属于2019秋福大软件工程实践Z班 本次作业要求 团队名称: Computer-Hunters 本次作业目标:撰写一份针对团队项目的需求 ...

  7. 简单认识RTLO(Right-to-Left Override)

    目录 两行代码实现字符逆序输出 做个假文件 参考 今天在群里看到的用法,RLO是一个微软的中东Unicode字符8238,或者0x202E,可以使后面的字符都变为RTL(阿拉伯语从右往左书写,对我们来 ...

  8. elasticsearch 分片的创建 集群重启分片运作

    2016年11月12日ENGINEERING Every shard deserves a home 作者 Joshua Backing Share Here are some great slide ...

  9. Nginx配置反向代理支持WebSocket

    http { #WebSocket代理配置 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { ...

  10. Harbor管理镜像

    安装Harbor管理镜像服务   阅读目录 Harbor是什么? 搭建步骤 安装Docker.Docker-compose 下载Harbor离线包 配置harbor.yml 运行 ./install. ...