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" }}} ] } } } '
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 历时 8 年,我冲上开源榜前 8 了!
· 物流快递公司核心技术能力-海量大数据处理技术
· 四大AI编程工具组合测评
· 关于能否用DeepSeek做危险的事情,DeepSeek本身给出了答案
· 如何在 Github 上获得 1000 star?