Elasticsearch 查询与过滤
Elasticsearch 使用的查询语言(DSL)拥有一套查询组件,这些组件可以以无限组合的方式进行搭配。这套组件可以在以下两种情况下使用:过滤上下文(filtering context)和查询上下文(query context)。
当使用于 过滤上下文 时,查询被设置成一个“不评分”或者“过滤”查询。即这个查询只是简单的问一个问题:“这篇文档是否匹配?”。回答也是非常的简单,yes 或者 no ,二者必居其一。
典型用法
当使用于 查询上下文 时,查询就变成了一个“评分”的查询。和不评分的查询类似,也要去判断这个文档是否匹配,同时它还需要判断这个文档匹配的有 多好(匹配程度如何)。
过滤查询(Filtering queries)只是简单的检查包含或者排除,这就使得计算起来非常快。考虑到至少有一个过滤查询(filtering query)的结果是 “稀少的”(很少匹配的文档),并且经常使用不评分查询(non-scoring queries),结果会被缓存到内存中以便快速读取,所以有各种各样的手段来优化查询结果。
相反,评分查询(scoring queries)不仅仅要找出匹配的文档,还要计算每个匹配文档的相关性,计算相关性使得它们比不评分查询费力的多。同时,查询结果并不缓存。
query的基础语法
filter的语法,一般跟着constant_score、bool
通常的规则是,使用查询(query)语句来进行 全文搜索 或者其它任何需要影响 相关性得分 的搜索。除此以外的情况都使用过滤(filters)。
2022-05-15 广告