bool对象的创建有以下两种:
//new 一个查询对象
BoolQueryBuilder boolQueryBuilder1 = QueryBuilders.boolQuery();
//也可以
BoolQueryBuilder boolQueryBuilder = boolQuery();
方法主要有:
1.must
文档 必须 匹配这些条件才能被包含进来。相当于sql中的 and
2.must_not
文档 必须不 匹配这些条件才能被包含进来。相当于sql中的 not
3.should
如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。相当于sql中的or
4.filter
必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
构造查询条件
-
termQuery:精确查询(不分词)
使用termQuery要注意的是,Elasticsearch5之后,取消了string类型,将原来的string类型拆分为text和keyword两种类型,他们的区别在于text会对字段进行分词处理,而keyword则不会。 -
matchQuery:匹配查询(分词)
match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,所以假如我搜索的条件输入的是"六年级",则会把各个年级(一年级至九年级)的数据都查询出来,因为其中都包含’年级’ 。 -
queryString:精确查询
-
wildcardQuery:模糊查询
-
rangeQuery:范围查询
// 实例代码
boolQueryBuilder.must().add(QueryBuilders.wildcardQuery("user_id.keyword",orgCode));
// 范围查询 gte:大于等于 gt:大于 lte:小于等于 lt:小于
boolQueryBuilder.filter(QueryBuilders.rangeQuery("itemPrice").from(4500).to(8899));
参考博客地址:https://blog.csdn.net/iampatrick_star/article/details/126888901