查询样例
{"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 等内容,下次再写吧