美文网首页
Elasticsearch Query查询和Filter查询

Elasticsearch Query查询和Filter查询

作者: Splunker | 来源:发表于2020-03-17 12:58 被阅读0次

一个查询语句究竟具有什么样的行为和得到什么结果,主要取决于它到底是处Query还是Filter。两者有很大区别,我们来看下:

  1. Query context 查询上下文 这种语句在执行时既要计算文档是否匹配,还要计算文档相对于其他文档的匹配度有多高,匹配度越高,_score 分数就越高
  2. Filter context 过滤上下文 过滤上下文中的语句在执行时只关心文档是否和查询匹配,不会计算匹配度,也就是得分

看下官方的例子

GET /_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title":   "Search"        }},
        { "match": { "content": "Elasticsearch" }}
      ],
      "filter": [
        { "term":  { "status": "published" }},
        { "range": { "publish_date": { "gte": "2015-01-01" }}}
      ]
    }
  }
}

对上面的例子分析下:

  1. query 参数表示整个语句是处于 query context 中
  2. boolmatch 语句被用在 query context 中,也就是说它们会计算每个文档的匹配度(_score)
  3. filter 参数则表示这个子查询处于 filter context 中
  4. filter 语句中的 termrange 语句用在 filter context 中,它们只起到过滤的作用,并不会计算文档的得分。

相关文章

网友评论

      本文标题:Elasticsearch Query查询和Filter查询

      本文链接:https://www.haomeiwen.com/subject/mpmqyhtx.html