es语法详解

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值