QueryBuilder 是es中提供的一个查询接口
private SearchResponse getApiResponseByDetail(SearchRequestBuilder responseBuilder,String condition) {
String time1 = "2020-01-02T00:00:00.000Z";
String time2 = "2020-01-02T15:59:59.000Z";
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("@timestamp")
.from(time1).to(time2);
SearchResponse searchResponse = responseBuilder.setQuery(
QueryBuilders.boolQuery()
//must表示and
.must(rangequerybuilder) //根据时间范围查询
.must(QueryBuilders.existsQuery("api_id"))
.must(QueryBuilders.matchPhraseQuery("detail", condition))
).setExplain(true).execute().actionGet();
return searchResponse;
}
注意:es存储日志 是按照UTC时间格式存放,以@timestamp 作为时间范围查询条件,即from(Date1) to(Date2)Date1、Date2入参必须是标准的utc格式;本地时间转utc?不清楚的小伙伴可以看下这篇 java如何实现本地时间转成UTC时间格式?
----------------------------------------------------------------分割线--------------------------------------------------------------------
1、BoolQuery( ) 用于组合多个叶子或复合查询子句的默认查询
boolQuery().must(termQuery("content", "test1"))
.must(termQuery("content", "test4"))
.mustNot(termQuery("content", "test2"))
.should(termQuery("content", "test3"))
.filter(termQuery("content", "test5"));
ps:以下来源:http://www.mamicode.com/info-detail-2113729.html
以下字段名用${fieldName}代替,具体值用${fieldValue}代替
1、数字
//单个
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
//批量
QueryBuilder qb1 = QueryBuilders.termsQuery("${fieldName}", "${fieldValues}");
2、字符串
//单个
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}.keyword", "${fieldValue}");
//批量
QueryBuilder qb1 = QueryBuilders.termsQuery("${fieldName}.keyword", "${fieldValues}");
1、数字
数字查询都为精确查询
2、字符串
QueryBuilder qb1 = QueryBuilders.moreLikeThisQuery(new String[]{"${fieldName}"}, new String[]{"${fieldValue}"}, null);
数字
//闭区间查询
QueryBuilder qb1 = QueryBuilders.rangeQuery("${fieldName}").from(${fieldValue1}).to(${fieldValue2});
//开区间查询
QueryBuilder qb1 = QueryBuilders.rangeQuery("${fieldName}").from(${fieldValue1}, false).to(${fieldValue2}, false);
//大于
QueryBuilder qb1 = QueryBuilders.rangeQuery("${fieldName}").gt(${fieldValue});
//大于等于
QueryBuilder qb1 = QueryBuilders.rangeQuery("${fieldName}").gte(${fieldValue});
//小于
QueryBuilder qb1 = QueryBuilders.rangeQuery("${fieldName}").lt(${fieldValue});
//小于等于
QueryBuilder qb1 = QueryBuilders.rangeQuery("${fieldName}").lte(${fieldValue});
QueryBuilder qb1 = QueryBuilders.moreLikeThisQuery(new String[]{"${fieldName1}"}, new String[]{"${fieldValue1}"}, null);
QueryBuilder qb2 = QueryBuilders.rangeQuery("${fieldName2}").gt("${fieldValue2}");
QueryBuilder qb3 = QueryBuilders.boolQuery().must(qb1).must(qb2);
❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ
❤如果喜欢怂怂写的文章,就给阿怂点个关注吧!(๑′ᴗ‵๑)づ╭❤~
❤对文章有任何问题欢迎小伙伴们下方留言,阿怂看到一定会极力给予答复。