windows wordpress 轻量级,网站优化方案,WordPress主题站,交互设计师和ui设计师的区别bool 查询是 Elasticsearch 中最常用的复合查询类型#xff0c;允许将多个查询组合在一起。它通过逻辑操作符#xff08;如 must、should、must_not 和 filter#xff09;来构建复杂的查询条件#xff0c;从而满足多条件匹配、逻辑与#xff08;AND#xff09;、或#…bool 查询是 Elasticsearch 中最常用的复合查询类型允许将多个查询组合在一起。它通过逻辑操作符如 must、should、must_not 和 filter来构建复杂的查询条件从而满足多条件匹配、逻辑与AND、或OR、非NOT的查询需求。
bool 查询主要由四个部分组成
must必须满足的条件类似于 SQL 中的 AND。should应该匹配的条件类似于 SQL 中的 OR。should 子句中的查询可以匹配也可以不匹配但如果匹配它会提高文档的相关性得分。must_not必须不匹配的条件类似于 SQL 中的 NOT。filter过滤条件不影响文档的得分只做精确的过滤判断。它对性能的影响较小适合对大批量数据进行过滤。
1. 示例
GET /items/_search
{query: {bool: {must: [{match: {name: 手机}}],should: [{term: {brand: { value: vivo }}},{term: {brand: { value: 小米 }}}],must_not: [{range: {price: {gte: 2500}}}],filter: [{range: {price: {lte: 1000}}}]}}
}2. 解释
must必须匹配 这里使用了一个 match 查询要求文档中的 name 字段必须包含 手机。也就是说只有 name 包含“手机”的文档才会被返回。
should可选匹配 这里有两个 term 查询分别要求 brand 字段为 vivo 或 小米。如果文档满足其中之一将增加其相关性得分但即使不匹配这些条件文档也可能被返回前提是 must 部分满足。
must_not必须不匹配 这里的 range 查询指定 price 字段的值必须小于 2500。也就是说价格大于或等于 2500 的文档将被排除在外。
filter过滤 使用 range 查询来筛选 price 小于或等于 1000 的文档。不同于 must 和 shouldfilter 不会影响文档的得分只是对结果集进行精确的过滤性能较好。
3. 使用
在idea中可以通过SearchRequest来构造查询条件。
// 构造查询条件
SearchRequest.Builder builder new SearchRequest.Builder();builder.query(query - query.bool(bool - {// 必须匹配name为手机bool.must(must -must.match(match -match.field(name).query(手机)));// 添加 should 条件匹配品牌比如vivo或小米bool.should(should - should.term(term -term.field(brand).value(vivo)));bool.should(should -should.term(term -term.field(brand).value(小米)));// 排除价格大于或等于2500的记录bool.mustNot(mustNot - mustNot.range(range -range.field(price).gte(2500)));// 过滤价格小于或等于1000的记录bool.filter(filter -filter.range(range -range.field(price).lte(1000)));return bool;
}));