ElasticSearch(must、should、filter、must_not) bool的查询
生活随笔
收集整理的这篇文章主要介绍了
ElasticSearch(must、should、filter、must_not) bool的查询
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
ElasticSearch的组合查询
现实的查询需求从来都没有那么简单;它们需要在多个字段上查询多种多样的文本,并且根据一系列的标准来过滤。为了构建类似的高级查询,你需要一种能够将多查询组合成单一查询的查询方法。
你可以用bool查询来实现你的需求。这种查询将多查询组合在一起,成为用户自己想要的布尔查询(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
必须匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
构造查询条件
1. termQuery:精确查询(不分词)
使用termQuery要注意的是,Elasticsearch5之后,取消了string类型,将原来的string类型拆分为text和keyword两种类型,他们的区别在于text会对字段进行分词处理,而keyword则不会。
2. matchQuery:匹配查询(分词)
match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,所以假如我搜索的条件输入的是"六年级",则会把各个年级(一年级至九年级)的数据都查询出来,因为其中都包含’年级’ 。
3. queryString:精确查询
4. wildcardQuery:模糊查询
5. rangeQuery:范围查询
代码示例:
BoolQueryBuilder boolQueryBuilder = boolQuery();
//精确查询
if (searchDto.getId() != null) {
boolQueryBuilder.must().add(termQuery("id", searchDto.getId()));
}
//模糊查询
if (searchDto.getSkuLike() != null) {
boolQueryBuilder.must().add(wildcardQuery("sku",StrUtil.format("*{}*",searchDto.getSkuLike())));
}
//范围查询
if (searchDto.getSupplierAddTimeStart() != null) {
boolQueryBuilder.must().add(rangeQuery("create_time").gte(searchDto.getSupplierAddTimeStart()));
}
//
if (searchDto.getSupplierAddTimeEnd() != null) {
boolQueryBuilder.must().add(rangeQuery("create_time").lte(searchDto.getSupplierAddTimeEnd()));
}
// or查询的情况 (Condition 1 OR Condition 2) AND Condition3
if (searchDto.getKeyword() != null) {
BoolQueryBuilder childBoolQueryBuilder = boolQuery();
childBoolQueryBuilder.should().add(wildcardQuery("sku",StrUtil.format("*{}*",searchDto.getKeyword())));
childBoolQueryBuilder.should().add(wildcardQuery("title",StrUtil.format("*{}*",searchDto.getKeyword())));
boolQueryBuilder.must().add(childBoolQueryBuilder);
}
总结
以上是生活随笔为你收集整理的ElasticSearch(must、should、filter、must_not) bool的查询的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C++ primer 第7章 类
- 下一篇: WGAN (原理解析)