企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# 执行过滤 在前面的章节中,我们跳过了文档得分的细节(搜索结果中的`_score`字段)。分数是一个数字值,是一个测量文本与查询条件匹配度的相对值。得分越高,文档越相关,得分越低文档的相关度越低。 但并不是所有的查询都需要计算得分,特别是在只过滤文档集的场景中。对于那些我们不需要相关度得分的场景下,Elasticsearch会探测与自动优化查询的执行过程,不计算无用的分数。 在前面的章节中我们介绍的[布尔查询](../..//Query\_DSL/Compound\_queries/Bool\_Query.md)同样也支持`过滤`子句的语法,在不改变得分的情况下,他使得查询请求返回的文档会被另一个条件进一步筛选。下面的示例,我们介绍一下[范围查询](../../Query_DSL/Term_level_queries/Range_Query.md),它允许我们根据一个值得范围来过滤文档,它只能用的数字与日期类型的过滤上。 这个示例演示了使用一个布尔查询来返回账户余额在20000与30000之间的所有账户信息(包括20000与30000)。换句话说,我们想要找到账户余额大于等于20000并且小于等于30000的账户。 ``` GET /bank/_search { "query": { "bool": { "must": { "match_all": {} }, "filter": { "range": { "balance": { "gte": 20000, "lte": 30000 } } } } } } ``` 分析上面的例子,被过滤的查询包含一个`match_all`查询(`query`部分)和一个`range`查询(`filter`部分)。我们可以用其它的条件来替换`query`与`filter`部分的内容。在上面的应用场景中,范围查询的最大意义在于:所有的在这个范围之内的文档都是平等的(或者说相关度都是一样的),没有一个文档比另一个文档更相关。 除了`match_all`, `match`, `bool`,`filtered`和`range`查询,还有很多其它类型的查询,我们这里不会涉及。由于我们已经对它们的工作原理有了基本的理解,将其应用到其它类型的查询、过滤器上也不是件难事。