ElasticsearchJSON查询总结.docx
- 文档编号:23859384
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:10
- 大小:36.24KB
ElasticsearchJSON查询总结.docx
《ElasticsearchJSON查询总结.docx》由会员分享,可在线阅读,更多相关《ElasticsearchJSON查询总结.docx(10页珍藏版)》请在冰豆网上搜索。
ElasticsearchJSON查询总结
Elasticsearch-JSON查询总结
一.数据模型
(1)索引定义:
INDEX:
POC
TYPE:
zabbixmetadata
(2)数据实体:
ID:
自增主键
ID:
ID值
VALUE_DAY:
该机器当天的值
GROUPNAME:
组名
TYPE_MACHINE:
机器类型
DATE:
日期
TYPE:
类型
(3)数据示例:
二.JSON查询
1.单个变量的查询
POSTpoc/zabbixmetadata/_search
{
"query":
{
"match":
{
"GROUPNAME":
"压力测试"
}
}
}
注:
做精确匹配搜索时,最好用过滤语句,因为过滤语句可以缓存数据。
2.过滤器查询
POSTpoc/zabbixmetadata/_search
{
"size":
100,
"query":
{
"filtered":
{
"filter":
{
"range":
{
"VALUE_DAY":
{
"gt":
30,
"lt":
100
}
}
},
"query":
{
"match":
{
"GROUPNAME":
"压力测试"
}
}
}
}
}
gt:
>大于
lt:
<小于
gte:
>=大于或等于
lte:
<=小于或等于
注:
字符串范围适用于一个基数较小的字段,一个唯一短语个数较少的字段.你的唯一短语数越多,搜索就越慢。
过滤顺序:
更详细的过滤条件应该被放置在其他过滤器之前,以便在更早的排除更多的文档。
缓存的过滤器非常快,所以它们需要被放在不能缓存的过滤器之前。
例如:
GET/logs/2014-01/_search{
"query":
{
"filtered":
{
"filter":
{
"range":
{
"timestamp":
{
"gt":
"now-1h"
}
}
}
}
}
}
这个过滤条件没有被缓存,因为它使用了now方法,这个值每毫秒都在变化。
这意味着我们需要每次执行这条查询时都检测一整个月的日志事件。
我们可以通过组合一个缓存的过滤器来让这变得更有效率:
我们可以添加一个含固定时间的过滤器来排除掉这个月的大部分数据,例如昨晚凌晨:
[
"bool":
{
"must":
[
{
"range":
{
"timestamp":
{
"gt":
"now-1h/d"<1>
}
}
},
{
"range":
{
"timestamp":
{
"gt":
"now-1h"<2>
}
}
}
]
}
]
<1>这个过滤器被缓存了,因为它使用了取整到昨夜凌晨now条件.
<2>这个过滤器没有被缓存,因为它没有对now取整.
now-1h/d条件取整到昨夜凌晨,所以所有今天之前的文档都被排除掉了。
这个结果的字节集被缓存了,因为now被取整了,意味着它只需要每天当昨夜凌晨的值改变时被执行一次。
now-1h条件没有被缓存,因为now表示最近一毫秒的时间。
然而,得益于第一个过滤器,第二个过滤器只需要检测当天的文档就行。
上面的实现能正常工作是因为自从昨晚凌晨条件比最近一小时条件位置更前。
假如它们用别的方式组合,那么最近一小时条件还是需要检测所有的文档,而不仅仅是昨夜以来的文档。
3.全文搜索
POSTpoc/zabbixmetadata/_search
{
"size":
100,
"query":
{
"match":
{
"TYPE_MACHINE":
"物理机"
}
}
}
4.短语搜索
POSTpoc/zabbixmetadata/_search
{
"size":
100,
"query":
{
"match_phrase":
{
"TYPE_MACHINE":
"物理机"
}
}
}
5.聚合查询
POSTpoc/zabbixmetadata/_search
{
"size":
100,
"aggs":
{
"avg_VALUE_DAY":
{
"avg":
{
"field":
"VALUE_DAY"
}
}
},
"query":
{
"bool":
{
"must":
[
{
"match":
{
"GROUPNAME":
"压力测试"
}
},
{
"match":
{
"TYPE":
"cpu"
}
},
{
"match":
{
"TYPE_MACHINE":
"物理机-标准OS"
}
}
]
}
}
}
6.多属性查询
bool过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:
must:
多个查询条件的完全匹配,相当于and;
must_not:
多个查询条件的相反匹配,相当于not;
should:
至少有一个查询条件匹配,相当于or.
POSTpoc/zabbixmetadata/_search
{
"size":
100,
"query":
{
"bool":
{
"must":
[
{
"match":
{
"GROUPNAME":
"压力测试"
}
},
{
"match":
{
"TYPE":
"cpu"
}
},
{
"match":
{
"TYPE_MACHINE":
"物理机-标准OS"
}
}
]
}
}
}
7.集群健康
GET/_cluster/health
green所有主要分片和复制分片都可用
yellow所有主要分片可用,但不是所有复制分片都可用
red不是所有的主要分片都可用
8.检查文档是否存在
curl-i-XHEADhttp:
//192.168.52.130:
9200/poc/zabbixmetadata/?
pretty
文档存在:
返回200OK
文档不存在:
返回404NotFound
9.查询type的mapping映射
GETpoc/zabbixmetadata/_mapping
string类型字段默认值是analyzed;如果我们想映射字段为确切值,我们需要设置它为not_analyzed.
analyzed首先分析这个字符串,然后索引.换言之,以全文形式索引此字段.若该字段为analyzed会对其分词,这样使用条件查询时无法得到与字段对应的结果;
not_analyzed索引这个字段,使之可以被搜索,但是索引内容和指定值一样.不分析此字段;
no不索引这个字段,这个字段不能为搜索到。
注:
对analyzed字段进行强制排序会消耗大量内存。
10.批量分页查询
GETpoc/zabbixmetadata/_search?
search_type=scan&scroll=1m
{
"query":
{
"range":
{
"DATE":
{
"gte":
"2017-08-01",
"lt":
"2017-09-01"
}
}
},
"size":
1000
}
三.备注
详细程序及数据请浏览:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ElasticsearchJSON 查询 总结