*字段名用fieldName代替,具体值用{fieldValue}代替
1、精确查询(数字或字符串)
【数字】
A:单个
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
B:批量
QueryBuilder qb1 = QueryBuilders.termsQuery("${fieldName}", "${fieldValues}");
字符串
A:单个
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}.keyword", "${fieldValue}");
B:批量
QueryBuilder qb1 = QueryBuilders.termQuery("${fieldName}.keyword", "${fieldValue}");
2、数值比较
【大于】QueryBuilders.rangeQuery("${fieldName}.").gt(${fieldValue})
【大于等于】QueryBuilders.rangeQuery("${fieldName}.").gte(${fieldValue})
【小于】QueryBuilders.rangeQuery("${fieldName}.").lt(${fieldValue})
【小于等于】QueryBuilders.rangeQuery("${fieldName}.").lte(${fieldValue})
3、脚本使用
【数值计算】
String queryStr = "(doc['TICKETPRICE'].value % 50000 == 0)";
Script script = new Script(queryStr);
QueryBuilders.scriptQuery(script);
4、模糊查询
【第一种】QueryBuilders.matchPhraseQuery("${fieldName}", "${fieldValue}")
【第二种,"${fieldValues}”的格式为 a | b | c ,可一次性查询满足a或者b或者c的数据】QueryBuilders.simpleQueryStringQuery("${fieldValues}").field("${fieldName}")
5、模糊查询之组合多条件查询
elasticsearch提供bool来实现这种需求
主要参数:
must:文档 必须 匹配这些条件才能被包含进来。
must_not:文档 必须不 匹配这些条件才能被包含进来。
should:如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
filter:必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
例子:
【must】
//${fieldName} = "${fieldValue}" and ${fieldName} = "${fieldValue}"
QueryBuilder qf1= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder qf2= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder q1 = QueryBuilders.boolQuery().must(qf1).must(q2);
【must not】
//${fieldName} != "${fieldValue}"
QueryBuilder q2 = QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilders.boolQuery().mustNot(q2);
【should】
//${fieldName} = "${fieldValue}" and ${fieldName} = "${fieldValue}"
QueryBuilder qf1= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder qf2= QueryBuilders.termQuery("${fieldName}", "${fieldValue}");
QueryBuilder q3 = QueryBuilders.boolQuery().should(qf1).should(qf2);
陆续还会继续分享,敬请期待~~