使用ES查询语句须知

查询样例

{"query": { 
  "bool": {
    "must": [{
        "query_string": {
            "default_field": "s_attack_type",
            "query": " *XXX* "
        }
    }],
    "should": [],
    "must_not": [],
    "filter": [{
        "range": {
            "l_last_ts": {
                "gte": 1579086000000,
                "lt": 1579172400000
            }
        }
    }, {
        "term": {
            "s_appId": "5308e20b"
        }
    }, {
        "term": {
            "s_app_type": "ios"
        }
    }, {
        "exists": {
            "field": "s_attack_type"
        }
    }]
}
}
}

这条语句代表这利用Kibana从ES中查询,查询条件以 query标签开始,以bool查询形式插入条件,其中可以插入条件
must , must_not , should , should_not , filter等,must , must_not , should , should_not , 这些是查询条件是以单独一条的形式存在的,就是说,如果使用,must,则must这个语句块总只放一个单独的条件,在filter中,这个语句块中可以放多个条件,如 range ,
term , exists等,range 表示用来查询时间区间内的数据,一个term相当于一个条件查询,多个term 则是相当于 条件 and 条件
exists则是代表,ES索引中必须存在这个key。
上述语句相当于下列 java 代码:

 QueryBuilder queryBuilder  = QueryBuilders.boolQuery().
                    filter(QueryBuilders.rangeQuery(EsQueryConstant.L_LAST_TS).gte(1579086000000).lt(1579172400000)).
                    filter(QueryBuilders.termQuery("s_appId", appId)).
                    filter(QueryBuilders.termQuery("s_app_type", "ios")).
                    filter(QueryBuilders.existQuery("s_attack_type")).
                    must(QueryBuilders.stringQuery("s_attack_type", "*" + "XXX" + "*"));

ES的查询语句必须满足JSON格式
其余的如 agg 等内容,下次再写吧

推荐阅读更多精彩内容