Query and filter context

Query and filter context

  查询子句的行为依赖于它是否在查询上下文或者过滤器上下文:

  查询上下文

    在查询上下文中使用的查询子句回答了“此文档与此查询子句匹配程度”的问题。除了决定文档是否匹配之外,查询子句还会计算一个_score,表示此文档和其它文档的匹配程度。

    只要当查询子句传递给一个查询参数(如search API中的查询参数),查询上下文就生效。

  过滤器上下文

    在过滤器上下文中,一个查询子句回答了“此文档是否匹配此查询子句?”的问题。该答案是简单的“Yes”或“No”—没有scores被计算。过滤器上下文主要用来过滤结构性数据,例如:

    • 此timestamp是否落在2015到2016之间?
    • status字段是否设置为“published”?

    频繁使用的过滤器将被Elasticsearch自动缓存,以提升性能。

    当查询子句传递一个过滤器参数时,过滤器上下文就生效,如在bool查询中的filter或者must_not参数,在constant_score查询中的filter参数或filter集合。

  下面是search API中被使用在查询或过滤器上下文的一个查询子句的例子。该查询将匹配所有以下条件被满足的文档:

  • title字段中包含search单词。 
  • content字段中包含elasticsearch单词。
  • status字段中包含精确的published单词。
  • publish_data包含从2015年1月1日起的日期。
GET /_search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }}, 
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [ 
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}

    query参数表示查询上下文。

    在查询上下文中使用bool和两个match子句,这意味着它们被用于评估每个文档的匹配程度。

    

  

    filter参数表示过滤器上下文

    在过滤器上下文中使用的term和range子句。它们会过滤出不符合的文件,但不会影响匹配文件的得分。

  

  小提示:在查询上下文中使用查询子句,这些条件应影响匹配文档的分数(即文档的匹配程度),并使用过滤器上下文中的所有其他查询子句。

 

原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html

转载于:https://www.cnblogs.com/benjiming/p/7083587.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值