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" }}} ] } } } '
复制代码

 

posted @   猪朵朵  阅读(506)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
阅读排行:
· 历时 8 年,我冲上开源榜前 8 了!
· 物流快递公司核心技术能力-海量大数据处理技术
· 四大AI编程工具组合测评
· 关于能否用DeepSeek做危险的事情,DeepSeek本身给出了答案
· 如何在 Github 上获得 1000 star?
点击右上角即可分享
微信分享提示