ES
agge 聚合
terms 条款,项
对text类型的字段进行分组,必须加上keyword,不加keyword ---->1 对该字段进行fileddata=true 2 会对该字段进行分词
GET /event-fw*/_search { "aggs": {
"test": { "terms": {"field": "event_type.keyword"} } } ,"size": 0 }
先查询过滤再进行分组
GET /event-fw*/_search { "aggs":{ "test":{ "terms":{ "field":"event_type.keyword" } } }, "size":0, "query":{ "match":{ "app_name":"网页浏览(HTTP)" } } }
结构化查询
bool合并子句或者复合子句 当must must_not should 里面有多个参数值,里面变成数组
GET /event-fw*/_search { "query": { "bool": { "must": { "match": { "title": "quick" }}, "must_not": { "match": { "title": "lazy" }}, "should": [ { "match": { "title": "brown" }}, { "match": { "title": "dog" }} ] } } }
查询和过滤的本质区别
ES语法简介
term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed的字符串(未经分析的文本数据类型): { "term": { "date": "2014-09-01" }}复制代码参考地址:es.xiaoleilu.com/054_Query_D…
es可以进行批量查询
先查找过滤再根据dst_ip 分组
时间在索引上过滤GET /event-fw*/_search { "query": { "bool": { "must": { "match": { "event_name":"漏扫" }}, "must": { "match": { "src_ip":"10.2.6.30" }} } } ,"aggs": { "test": { "terms": { "field": "dst_ip", "size": 5 } } } }
先根据ip分组,在根据关键字进行过滤
简单搜索
DSL查询
复杂的搜索 filter query 的嵌套
全文搜索 match
短语匹配 match_phrase 对内容短语不进行拆分
聚合
直接聚合
查询过滤再聚合
聚合再统计
应对故障
主分片的数量在创建缩影是已经确定,也就是说你大概有多少数据
es查询语法
根据时间过滤再分组
SearchResponse table1 = ESConfig.client().prepareSearch("event-fw-*") .setQuery(QueryBuilders.rangeQuery("event_receive_time").from("0").to("1557471553437")) .addAggregation(AggregationBuilders.terms("src_ip").field("src_ip") .subAggregation(AggregationBuilders.sum("total_up").field("up_bit")) .subAggregation(AggregationBuilders.sum("total_total").field("total_bit")) .subAggregation(AggregationBuilders.sum("total_down").field("down_bit"))) .setSize(10) .execute().get();复制代码es批量查询
MultiSearchRequestBuilder multiSearchRequestBuilder = ESConfig.client().prepareMultiSearch(); //创建查询条件 //查询tags:car SearchRequestBuilder carSearch = ESConfig.client().prepareSearch(INDEX_FW); carSearch.setQuery(QueryBuilders.matchQuery(FEILD_EVENT_NAME, ATTACK_FIVE)); multiSearchRequestBuilder.add(carSearch); //查询tags:male SearchRequestBuilder maleSearch = ESConfig.client().prepareSearch(INDEX_FW); maleSearch.setQuery(QueryBuilders.matchQuery(FEILD_EVENT_NAME,ATTACK_ONE)); multiSearchRequestBuilder.add(maleSearch); multiSearchRequestBuilder.execute().get();复制代码关于这四个query的区别
9200和9300
es启动监听两个端口,9300和9200 9300端口是使用tcp客户端连接使用的端口; 9200端口是通过http协议连接es使用的端口;
转载于:https://juejin.im/post/5d2e71fef265da1bcf5e0f9d