01.query的分类-条件查询和组合查询

1. es单个条件查询和组合查询

es的query DSL(Domain Specific Language),都是json格式,一般分为两大类

1.单个条件查询
这种一般是针对index中的某一个field进行个别value的查询,比如 mathc,term,range 查询等等。这些查询一般可以独立使用。

2.组合查询
这种查询一般是将单个条件的查询组合起来,只是起到组合的作用,比如bool, dis_max 查询,或者是修改查询的一些查询比如constant_score查询

2.query和filter context

默认情况下,Elasticsearch按相关性得分对匹配的搜索结果进行排序,以衡量每个文档与查询的匹配程度。
相关性分数是一个正浮点数,在搜索API的_score元字段中返回。 _score越高,文档越相关。尽管每种查询类型可以用不同的方式地计算相关性分数,但是分数计算还取决于查询子句是在query context中还是在filter context中运行。

1. query context

在query context中,查询子句回答以下问题:“此文档与该查询子句的匹配程度如何?”除了确定文档是否匹配之外,查询子句还计算_score元字段中的相关性得分。

只要将查询子句传递到query参数(例如搜索API中的query参数),query context就有效。

2. filter context

在filter context中,查询子句回答问题“此文档是否与此查询子句匹配?”答案是简单的“是”或“否”,即不计算分数。filter context主要用于过滤结构化数据,例如下面的过滤:

  1. timestamp 字段是否在2015年至2016年的范围内?
  2. status 状态字段设置为“已发布”吗?

常用过滤器将由Elasticsearch自动缓存,以提高性能。
只要将查询子句传递到过滤器参数(例如bool查询中的filtermust_not参数,constant_score查询中的filter参数或过滤器聚合),filter context即有效。这一句也说明了filter context的使用场景。

3.使用样例

GET /_search
{
  "query": {   # 对应的query标识了一个query context
    "bool": {  # bool和对应的math都是对应了query context
      "must": [
        { "match": { "title":   "Search"        }}, 
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [ # 这里filter标识了一个filter context,下面的term,range都是在filter context中,不会影响score的计算 
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}

这个查询要求下面的条件都要满足

  1. tiele field中有 “Search” 单词
  2. content field中有 Elasticsearch 单词
  3. status field 严格等于published
  4. publish_date 的日期大于 “2015-01-01”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值