ES 搜索(4)——Query DSL及query context VS filter context

Elasticsearch提供基于JSON的完整查询DSL(Domain Specific Language)来定义查询。

Query DSL 由两种子句构成:

1.叶子查询子句:

    在特定field中查询特定的值,如match、term、range查询等,这些叶子查询子句可以单独使用。

2.复合查询子句:

    复合查询子句包裹叶子查询子句,也可以嵌套复合查询子句,按逻辑组合查询结果,如bool、dis_max,或者改变查询规则,如constant_score 查询。

 Query上下文 VS Filter上下文:查询子句的行为取决于query还是filter。

1.query context:query要做的事情是判断该文档如何匹配查询语句,这样的查询语句会计算一个得分(_score)表示该文档与其他文档的匹配度。查询语句传入query参数时查询有效。

GET /_search
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

2.filter context :filter要做的事情是判断该文档是否匹配该查询语句,要么是,要么否,不计算得分,通常用来过滤结构化数据,如是否在2016-2018时间范围内,status是否是published状态等。过滤查询的结果通常会自动缓存,加快查询。传入filter参数时,查询有效,如:bool查询中的filter或must_not参数,constant_score中的filter参数,filter aggregation等。

#query 指定是query context;bool中的两个match查询相关内容,决定文档的匹配度;filter过滤掉不符合条件的文档,但是不影响匹配文档的得分。
curl -XGET 'localhost:9200/_search?pretty' -H 'Content-Type: application/json' -d' { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } } '

 

转载于:https://www.cnblogs.com/zhxdxf/p/8398110.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值